數據庫運維(一)

一、分析命令

1、SQL語句分析:explain

1) id:對應的sql語句,設計union、子查詢的SQL會有多個

2) possible_keys:可供優化器選擇的索引列

3) key:該條SQL被優化器使用的索引列

4) key_len:連接SQL語句和where條件中的索引

5) explain partitions:對分區表操作的SQL語句提供附加信息

2、索引相關:show indexs

1)cardinalits(基數):索引列不同數據的數量(相同數據只取一個),創建索引可以參考索引基數/數據行數。

3、系統參數分析:show status、show variables

1) Show table status like ‘表名’:avg_row_length--平均每行數據大小(字節,以下均同)、data_length--全表共有多少字節、max_data_length--表最大字節容量、index_length--索引佔用磁盤大小

2) show [ session | global ] variables:查看MySQL系統變量的當前參數,session級別的只會影響到本session,global是系統級別的。

3) 參數:

1. key_buffer_size:定義myisam索引的全局內存緩衝區。

2. Innodb_buffer_pool_size:定義innodb緩衝池的大小,它是存放數據與索引頁的場所。對於Innodb很重要,不正確的分配會導致額外的IO開銷。一般情況下,是RAM的80%。

3. query_cache_size:定義查詢緩存的大小。它用來緩存經常執行的SELECT語句。

4. show global variables like ‘innodb_buffer%’:用來監控innodb緩衝池。

5. max_heap_table_size:定義一個MEMORY引擎表的最大容量。當某個表容量超過最大值時報錯。

*Memory引擎將數據存儲在內存中,由於沒有磁盤I./O的等待,速度極快。但由於是內存存儲引擎,所做的任何修改在服務器重啟後都將消失。

6. tmp_table_size:定義一個內部基於內存的臨時表的最大容量。它與max_heap_table_size參數有密切關聯。

7. join_buffer_size:定義每個線程的內存緩衝區,當查詢必須連接兩個表的數據集並且不能使用索引時,用到這個緩衝區。建議默認值。

8. sort_buffer_size:定義每個線程用於對結果集排序的每個線程的緩衝區。

9. read_buffer_size:連續的表數據掃描會用到這個緩衝區。如果存在大量的連續掃描,推薦加大。

10. read_md_buffer_size:用來存儲那些作為排序操作的結果被讀取的數據。

11. slow_query_log: 慢查詢日誌的開關(1/0)。

12. slow_query_log_file:慢查詢日誌保存文件名及其位置。

13. long_query_time:如果query time超過了該值,則認為是較慢查詢,並被記錄下來。單位是秒。

14. max_allowed_packet:定義SQL查詢結果集的最大值(字節)。

15. wait_timeout:服務器關閉非交互連接(連接空閒)之前等待活動的秒數(默認值28800秒)。建議修改為100。

16. interactive_timeout:服務器關閉交互式連接前等待活動的秒數(默認值28800秒)。建議修改為100。


二、系統優化

1)慢查詢

數據庫運維(一)

2)連接數:max_used_connections / max_connections * 100% = 99.6% (理想值 ≈ 85%)。

數據庫運維(一)

3)key_buffer_size:一共有25629497個索引讀取請求,有66071個請求在內存中沒有找到直接從硬盤讀取索引(key_reads),計算索引命中緩存的概率:key_buffer_read_hits =(
1-Key_reads/Key_read_requests)*100%=(1-0.27)% =99.73%

數據庫運維(一)

4)進程使用情況:

數據庫運維(一)

設置thread_cache_size參數,服務器就會有線程池來管理連接。

Thread_cache_hits = (1 - Threads_created / Connections) * 100%Threads_created表示創建過的線程數,如果發現Threads_created值過大的話,表明 MySQL服務器一直在創建線程,這也是比較耗資源。

Thread Cache 命中率>90% 比較合理,需要調整thread_cache_size變量。

數據庫運維(一)

5)查詢緩存qcache:

數據庫運維(一)

1. Qcache_free_blocks:緩存中相鄰內存塊的個數。數目大說明可能有碎片。FLUSH QUERY CACHE會對緩存中的碎片進行整理,從而得到一個空閒塊。

2. Qcache_total_blocks:緩存中塊的數量。

3. Qcache_hits:每次查詢在緩存中命中時就增大 。

4. Qcache_inserts:未命中然後插入緩存的次數。即沒有命中的次數。

5. Qcache_lowmem_prunes:緩存出現內存不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個數字在不斷增長,就表示可能碎片非常嚴重,或者內存很少。(上面的free_blocks和free_memory可以告訴您屬於哪種情況) 。

6. Qcache_not_cached:不適合進行緩存的查詢的數量,通常是由於這些查詢不是 SELECT 語句或者用了now()之類的函數。

7. Qcache_queries_in_cache:當前緩存的查詢(和響應)的數量。

數據庫運維(一)

1.query_cache_limit:超過此大小的查詢將不緩存

2.query_cache_min_res_unit:緩存塊的最小大小
3.query_cache_size:查詢緩存大小

4.qcache_free_memory:緩存中的空閒內存。
5.query_cache_type:緩存類型,決定緩存什麼樣的查詢,示例中表示不緩存 select sql_no_cache 查詢

6.query_cache_wlock_invalidate:當有其他客戶端正在對MyISAM表進行寫操作時,如果查詢在query cache中,是否返回cache結果還是等寫操作完成再讀表獲取結果。

7.query_cache_min_res_unit:默認是4KB,設置值大對大數據查詢有好處,小數據查詢,就容易造成內存碎片和浪費。

系統配置優化:

1.查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%

如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit。
2.查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。

3. 查詢緩存命中率 = Qcache_hits / (Qcache_hits+ Qcache_inserts) * 100%

4. 示例圖中查詢緩存碎片率 = 13.23%,查詢緩存利用率 = 67.82%,查詢緩存命中率 = 74.88%

6)打開文件數open_files:比較合適的設置:Open_files / open_files_limit * 100% <= 75%

數據庫運維(一)

7)表鎖情況:Table_locks_immediate 表示立即釋放表鎖數,Table_locks_waited表示需要等待的表鎖數,如果 Table_locks_immediate / Table_locks_waited > 5000,最好採用InnoDB引擎。

數據庫運維(一)

8)查看操作系統命令

1.top:實時顯示process的狀態

2.vmstat:vmstat命令是最常見的Linux/Unix監控工具,屬於sysstat包。可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。

3.iostat:iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁盤操作活動進行監視。它的特點是彙報磁盤活動統計情況,同時也會彙報出CPU使用情況。iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。

4.ps:用於顯示當前進程的狀態,類似於 windows 的任務管理器。

5.df:用於顯示目前在 Linux 系統上的文件系統磁盤使用情況統計。

6.lsof:用於查看你進程打開的文件,打開文件的進程,進程打開的端口(TCP、UDP)。

7.netstat:用於顯示網絡狀態。利用netstat 指令可讓你得知整個 Linux 系統的網絡情況。


分享到:


相關文章: