MySQL客戶端連接成功后,通過使用show [session|global] status 命令可以提供服務器狀態信息。其中的session來表示當前的連接的統計結果,global來表示自數據庫上次啟動至今的統計結果。默認是session級別的。 下面的例子: show status like ‘Com_%’; 其中Com_XXX表示XXX語句所執行的次數。 重點注意:Com_select,Com_insert,Com_update,Com_delete通過這幾個參數,可以容易地了解到當前數據庫的應用是以插入更新為主還是以查詢操作為主,以及各類的SQL大致的執行比例是多少。 還有幾個常用的參數便于用戶了解數據庫的基本情況。 Connections:試圖連接MySQL服務器的次數 Uptime:服務器工作的時間(單位秒) Slow_queries:慢查詢的次數 (默認是10)
通過慢查詢日志定位執行效率較低的SQL語句。慢查詢日志記錄了所有執行時間超過long_query_time所設置的SQL語句。 show variables like ‘long_query_time’; set long_query_time=2; 測試語句 ?select * from emp e,dept d where e.empno=123451? and e.deptno=d.deptno; ?查看慢查詢日志:默認為數據目錄data中的host-name-slow.log。低版本的mysql需要通過在開啟mysql時使用- -log-slow-queries[=file_name]來配置
?
?
?
1, 查看MySQL服務器配置信息
mysql>?show?variables;??
2, 查看MySQL服務器運行的各種狀態值
mysql>?show?global?status;?
3, 慢查詢
Java代碼 ?
mysql>?show?variables?like?'%slow%'; ??
+------------------+-------+ ??
|?Variable_name????|?Value?| ??
+------------------+-------+ ??
|?log_slow_queries?|?OFF???| ??
|?slow_launch_time?|?2?????| ??
+------------------+-------+ ??
mysql>?show?global?status?like?'%slow%'; ??
+---------------------+-------+ ??
|?Variable_name???????|?Value?| ??
+---------------------+-------+ ??
|?Slow_launch_threads?|?0?????| ??
|?Slow_queries????????|?279???| ??
+---------------------+-------+??
mysql> show variables like '%slow%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | OFF |
| slow_launch_time | 2 |
+------------------+-------+
mysql> show global status like '%slow%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| Slow_launch_threads | 0 |
| Slow_queries | 279 |
+---------------------+-------+
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 500 |
+-----------------+-------+mysql> show global status like 'max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 498 |
+----------------------+-------+
mysql> show global status like 'key_blocks_u%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Key_blocks_unused | 10285 |
| Key_blocks_used | 47705 |
+-------------------+-------+
mysql> show variables where Variable_name in ('tmp_table_size', 'max_heap_table_size');
+---------------------+-----------+
| Variable_name | Value |
+---------------------+-----------+
| max_heap_table_size | 134217728 |
| tmp_table_size | 134217728 |
+---------------------+-----------+
需要增加tmp_table_size
7,open table 的情況
Java代碼 ?
mysql>?show?global?status?like?'open%tables%'; ??
+---------------+-------+ ??
|?Variable_name?|?Value?| ??
+---------------+-------+ ??
|?Open_tables???|?1024??| ??
|?Opened_tables?|?1465??| ??
+---------------+-------+??
mysql> show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 1024 |
| Opened_tables | 1465 |
+---------------+-------+
mysql> show global status like 'sort%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| Sort_merge_passes | 2136 |
| Sort_range | 81888 |
| Sort_rows | 35918141 |
| Sort_scan | 55269 |
+-------------------+----------+
Sort_merge_passes 包括兩步。MySQL 首先會嘗試在內存中做排序,使用的內存大小由系統變量 Sort_buffer_size 決定,如果它的大小不夠把所有的記錄都讀到內存中,MySQL 就會把每次在內存中排序的結果存到臨時文件中,等 MySQL 找到所有記錄之后,再把臨時文件中的記錄做一次排序。這再次排序就會增加 Sort_merge_passes。實際上,MySQL 會用另一個臨時文件來存再次排序的結果,所以通常會看到 Sort_merge_passes 增加的數值是建臨時文件數的兩倍。因為用到了臨時文件,所以速度可能會比較慢,增加 Sort_buffer_size 會減少 Sort_merge_passes 和 創建臨時文件的次數。但盲目的增加 Sort_buffer_size 并不一定能提高速度,見 How fast can you sort data with MySQL?(引自http://qroom.blogspot.com/2007/09/mysql-select-sort.html)
mysql> show global status like 'open_files';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files | 821 |
+---------------+-------+mysql> show variables like 'open_files_limit';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
mysql> show global status like 'table_locks%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Table_locks_immediate | 4257944 |
| Table_locks_waited | 25182 |
+-----------------------+---------+
mysql> show global status like 'com_select';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_select | 2693147 |
+---------------+---------+