①、獲取運行中的mysql進程使用各服務器參數及其值
mysql
MariaDB [(none)]> SHOW GLOBAL VARIABLES\G #查看服務器全局參數 MariaDB [(none)]> SHOW SESSION VARIABLES\G MariaDB [(none)]> SHOW VARIABLES\G #查看服務器當前會話參數,上面兩條命令等同。
修改服務器變量的值(此類修改服務器重啓後將失效,若是想永久有效須要添加到配置文件中。其中有些參數支持運行時修改,會當即生效;有些參數不支持,且只能經過修改配置文件,並重啓服務器程序生效。有些參數做用域是全局的,且不可改變;有些能夠爲每一個用戶提供單獨的設置)算法
MariaDB [(none)]> SET GLOBAL skip_name_resolve=ON; ERROR 1238 (HY000): Variable 'skip_name_resolve' is a read only variable #能夠看到報錯信息爲skip_name_resolve爲只讀變量,不支持修改,這類參數只能修改配置文件並重啓服務生效 MariaDB [(none)]> SET GLOBAL general_log=ON; Query OK, 0 rows affected (0.04 sec) #修改全局變量後只會對新創建的會話有效,對已經創建的會話並無生效,上面爲修改全局參數的方法 MariaDB [(none)]> SET SESSION sql_mode='TRADITIONAL'; #修改當前進程的服務器參數,修改完只對當前會話有效。這裏是修改對約束等的響應行爲,經常使用的模式有:默認的約束是截取指定的長度。TRADITIONAL(不容許對非法值進行插入), STRICT_TRANS_TABLES(對全部支持事務類型的表嚴格約束), or STRICT_ALL_TABLES(對全部表嚴格約束)
查看查詢緩存是否開啓和查詢緩存的大小sql
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'query_cache_type'\G *************************** 1. row *************************** Variable_name: query_cache_type Value: ON #ON,查詢緩存開啓。OFF,查詢緩存不開啓。DEMAND,查詢緩存按需進行,顯式指定SQL_CACHE的SELECT語句纔會緩存,其它均不予緩存 MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'query_cache_size'\G
查看SELECT語句查詢的次數和命中的次數數據庫
MariaDB [hellodb]> SHOW GLOBAL STATUS LIKE 'Com_select'; MariaDB [hellodb]> SHOW GLOBAL STATUS LIKE 'Qcache_hits';
②、狀態變量:用於保存mysqld運行中的統計數據的變量,不可修改緩存
MariaDB [(none)]> SHOW GLOBAL STATUS; MariaDB [(none)]> SHOW SESSION STATUS;
③、查看字符集和排序規則bash
MariaDB [(none)]> SHOW CHARACTER SET; MariaDB [(none)]> SHOW COLLATION;
④、查看警告信息服務器
MariaDB [hellodb]> SHOW WARNINGS;
⑤、查看錶狀態ide
MariaDB [hellodb]> SHOW TABLE STATUS LIKE 'toc'\G
⑥、查看指定數據庫指定表的索引函數
MariaDB [hellodb]> SHOW INDEXES FROM mysql.user\G
⑦、不會真正執行語句,只會去分析查詢語句查詢過程當中是否使用了索引以及如何實現數據獲取優化
MariaDB [hellodb]> EXPLAIN SELECT * FROM classes WHERE ClassID=5\G *************************** 1. row *************************** id: 1 select_type: SIMPLE #簡單查詢,單表實現 table: classes #查詢的表 type: const #一對一查詢 possible_keys: PRIMARY #查詢過程當中可能用到主鍵 key: PRIMARY #查詢過程當中用到主鍵 key_len: 1 ref: const rows: 1 #取了一行數據 Extra:
⑧、查看當前mysql鏈接的線程
MariaDB [hellodb]> SHOW PROCESSLIST;
⑨、查看當前會話的事務隔離級別
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'tx_isolation'; MariaDB [(none)]> SET tx_isolation='READ-UNCOMMITTED';
⑩、查詢緩存相關的服務器變量
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'query_cache%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_strip_comments | OFF | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+ #query_cache_limit:可以緩存的最大查詢結果;對於有着較大結果的查詢語句,建議在SELECT中使用SQL_NO_CACHE #query_cache_min_res_unit: 查詢緩存中內存塊的最小分配單位;較小值會減小浪費,但會致使更頻繁的內存分配操做;較大值會帶來浪費,會致使碎片過多 #query_cache_size:查詢緩存總共可用的內存空間;單位是字節,必須是1024的整數倍; #query_cache_type: ON, OFF, DEMAND。ON,查詢緩存開啓。OFF,查詢緩存不開啓。DEMAND,查詢緩存按需進行 #query_cache_wlock_invalidate:若是某表被其它的鏈接鎖定,是否仍然能夠從查詢緩存中返回結果;默認值爲OFF,表示能夠在表被其它鏈接淘寶的場景中繼續從緩存返回數據;ON則表示不容許;
查詢緩存:
如何判斷是否命中:
經過查詢語句的哈希值判斷:哈希值考慮的因素包括
查詢自己、要查詢的數據庫、客戶端使用協議版本,...
查詢語句任何字符上的不一樣,都會致使緩存不能命中;
哪此查詢可能不會被緩存?
查詢中包含UDF、存儲函數、用戶自定義變量、臨時表、mysql庫中系統表、或者包含列級權限的表、有着不肯定值的函數(Now());
⑩①、查詢相關的狀態變量
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%'; +-------------------------+---------+ | Variable_name | Value | +-------------------------+---------+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 1582248 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 1 | +-------------------------+---------+ #緩存命中率的評估:Qcache_hits/(Qcache_hits+Com_select) #Qcache_free_blocks:空閒的內存塊 #Qcache_free_memory:空閒的內存空間 #Qcache_hits:緩存命中數 #Qcache_inserts:可緩存的結果被放入到緩存的次數 #Qcache_lowmem_prunes:有多少次是由於內存空間使用算法清除緩存的次數 #Qcache_not_cached:可緩存可是沒有給緩存的次數 #Qcache_queries_in_cache:當前查詢緩存中被緩存下來的查詢語句的個數 #Qcache_total_blocks:在整個緩存中,當分配了多個不連續的內存時,總共的塊數
⑩②、獲取查詢執行計劃信息,用來查看查詢優化器如何執行查詢;
MariaDB [hellodb]> EXPLAIN SELECT Name From students WHERE StuID > 10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: students type: range possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 16 Extra: Using where
輸出分析:
id: 當前查詢語句中,每一個SELECT語句的編號;
簡單類型的查詢
複雜類型的查詢有三種:
簡單子查詢用於WHERE;
用於FROM中的子查詢;
聯合查詢:UNION(UNION查詢的分析結果會出現一外額外匿名臨時表);
select_type:查詢的類型
簡單查詢爲SIMPLE
複雜查詢:
SUBQUERY: 簡單子查詢;
DERIVED: 用於FROM中的子查詢;
UNION:UNION語句的第一個以後的SELECT語句;
UNION RESULT: 匿名臨時表;
table:SELECT語句關聯到的表
type:關聯類型,或訪問類型,即MySQL決定的如何去查詢表中的行的方式
ALL: 全表掃描;
index:根據索引的次序進行全表掃描;若是在Extra列出現「Using index」表示了使用覆蓋索引,而非全表掃描;
range:有範圍限制的根據索引實現範圍掃描;掃描位置始於索引中的某一點,結束於另外一點;
ref: 根據索引返回表中匹配某單個值的全部行;
eq_ref:僅返回一個行,但與須要額外與某個參考值作比較;
const, system: 直接返回單個行;
possible_keys:查詢可能會用到的索引
key: 查詢中使用了的索引
key_len: 在索引使用的字節數
ref: 在利用key字段所表示的索引完成查詢時全部的列或某常量值
rows:MySQL估計爲找全部的目標行而須要讀取的行數
Extra:額外信息
Using index:MySQL將會使用覆蓋索引,以免訪問表;
Using where:MySQL服務器將在存儲引擎檢索後,再進行一次過濾;
Using temporary:MySQL對結果排序時會使用臨時表;
Using filesort:對結果使用一個外部索引排序;
⑩③、查詢各日誌的相關配置
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE '%log%'; MariaDB [hellodb]> SHOW SESSION VARIABLES LIKE '%log%';
⑩④、二進制日誌查詢相關信息
MariaDB [(none)]> SHOW MASTER LOGS; #查看Mariadb自行管理使用中的二進制日誌文件列表 MariaDB [(none)]> SHOW MASTER STATUS: #查看使用中的二進制日誌文件 MariaDB [(none)]> SHOW BINLOG EVENTS IN 'ON.000001' FROM 4 LIMIT 1,5; #查看二進制日誌的事件,顯示ON.000001二進制日誌Pos爲4的偏移一個顯示後面五個