伺服器負載方面的優化(高效能mysql總結)
伺服器負載方面優化包括記憶體,io和cpu,屬於作業系統和硬體方面。
伺服器負載優化的目標是低延時(時間查詢快),高吞吐(併發執行查詢)。
cpu:目前mysql每個查詢只能使用乙個cpu,因此,併發查詢時無法擴充套件cpu的數量。資料庫併發的問題有兩類:邏輯併發和內部併發。邏輯併發是指應用程式的資源爭用,例如鎖。內部併發是指 訊號量,innodb緩衝池頁面的資源爭用等。
記憶體:關於記憶體,主要需要考慮以下幾方面:記憶體的上下限,記憶體大小,每個連線mysql需要使用多少記憶體。繫結變數和innodb資料字典,使用大的臨時表或者複雜儲存過程的查詢也可能消耗記憶體。可以通過檢視虛擬記憶體linux中top的virt和ps名利的vsz列。mysql比較重要的快取如下:
a.innodb緩衝池
b.innodb日誌檔案和myisam資料的作業系統快取
c.myisam鍵快取
d.查詢快取
e.無法手工配置的快取,二進位制日誌和表定義檔案的作業系統快取。
a.innodb緩衝池:快取索引,行的資料,鎖,插入快取和自適應雜湊索引。關閉innodb,修改innodb_max_dirty_pages_pct變數小。監控innodb:innodb_buffer_pool_pages_dirty和show engine innodb
status;來觀察髒頁的重新整理量。
c.myisam鍵快取
myisam只快取索引,不快取資料。
配置引數:
1.key_buffer_size大小參照索引儲存占用的空間:
select
sum(index_length) from information_schema.tables where engine=』myisam』;
2.設定多個鍵緩衝方法:
a.在配置檔案中設定
key_buffer_1.key_buffer_size=*g
key_buffer_2.key_buffer_size=*g
b.使用cache_index將表對映到緩衝區
cache_index table1,table2
in key_buffer_1;
c.把錶的索引載入快取中
load index into cache
table1,table2.
3.監控鍵快取的方法:
show status /show
variables
4.計算緩衝區的使用率
100-((key_blocks_unused*key_cache_block_size)*100/key_buffer_size)
5.鍵快取塊大小:
key_block_size,通過create index語句的key_block_size指定
d.查詢快取:mysql查詢快取儲存查詢返回的完整結果。快取命中的問題,任何字元上的不一致都會導致快取不命中,或者不確定的資料,例如now(),current_data()和current_user或者connection_id.查詢中包含任何自定義的函式,系統函式,臨時表,系統變數,系統表都不會快取。mysql先申請query_cache_min_res_unit的空間,然後鎖住空間塊,找乙個校的資料開儲存結果。如果還有剩餘,則釋放後放入空閒記憶體部分。查詢快取的是否有效的指標命中率和是否提公升效能。未命中快取是指沒有從查詢快取中返回資料,記憶體不足,快取碎片和資料修改都是造成查詢快取的原因。
查詢快取只能在會話級別進行,在資料庫或者表級別不要控制查詢快取。
解決方法:1.通過引數com_*來檢視資料修改情況。2.通過qcache_lowmem_prunes來檢視多少次失效是記憶體不足導致的。
查詢快取引數:
1.query_cache_type (off,on,demand),是否開啟。demand是指只有在查詢語句中明確寫明sql_cache的語句才放入查詢快取。
2.query_cache_size查詢快取使用的總記憶體空間,位元組(設定時1024整數倍)。值=0,代表關閉查詢快取。
3.query_cache_min_res_unit分配記憶體塊時的最小單位。
4.query_cache_limit能夠快取的最大查詢結果。如果結果超過此大小,那麼不快取,並返回qcache_not_catched標誌。處理方法,在查詢中加入sql_no_cache
5.query_cache_wlock_invalidate,如果鎖住,是否仍然從快取中返回結果。預設off
減少碎片的方法:
1.選擇合適的query_cache_min_res_unit
2.設定單個查詢最合適大小:(query_cache_size-qcache_free_memory)除以qcache_queries_in_cache.
3.觀察qcache_free_blocks的空閒塊多少。 qcache_total_blocks與qcache_free_block的比例不能超過50%
4.flush query cache完成碎片整理。使查詢快取重新排序
5.reset query cache清空快取。
查詢快取記憶體空間小,刪除老的快取結果。增加狀態值qcache_lowmem_prunes的值
e.執行緒快取:thread_cache_size指定了可以快取的執行緒數。
thread_connected
thread_created觀察執行緒快取是否足夠大
表快取:儲存的物件是表。opened_tables很大,表快取不夠,增加table_cache系統變數。open_files_limit允許開啟檔案數量。
mysql 資料過大時的匯入
當需要匯入的檔案比較大時,匯入會報錯。報錯內容為 error code 1153 got a packet bigger than max allowed packet bytes錯誤提示。2006 mysql server has gone away 這時需要我們修改mysql的配置檔案 linu...
mysql臨時錶太大 MySQL臨時表過大報錯
mysql 報如下的錯誤 error 126 hy000 incorrect key file for table mysql 報如下的錯誤 error 126 hy000 incorrect key file for table tmp sql 6613 0.myi try to repair i...
mysql中ibdata1過大的問題
ibdata1檔案是什麼?答 ibdata1是乙個用來構建innodb系統表空間的檔案,這個檔案包含了innodb表的元資料 撤銷記錄 修改buffer和雙寫buffer。如果file per table選項開啟的話,該檔案則不一定包含所有表的資料。當innodb file per table選項開...