調優思路:
1.資料庫設計與規劃--以後再修該很麻煩,估計資料量,使用什麼儲存引擎
2.資料的應用--怎樣取資料,sql語句的優化
3.mysql服務優化--記憶體的使用,磁碟的使用
4.作業系統的優化--核心、tcp連線數量
5.公升級硬體裝置
磁碟io規劃
raid技術:raid0[xfs]
swap分割槽:最好使用raid0
磁碟分割槽:乙個庫放到乙個分割槽上或乙個磁碟上
物理分割槽
create table t1(id int,name char(20)) data directory='/data/' index directory ='/data';
mkdir /data
chown mysql.mysql /data
mysql> show variables like '%part%';
4.作業系統的優化
網絡卡bonding技術,
tcp連線數量限制
優化系統開啟檔案的最大限制
關閉作業系統不必要的服務
5.mysql服務優化
show status 看系統的資源
show variables 看變數,在my.cnf配置檔案裡定義的
show warnings 檢視最近乙個sql語句產生的錯誤警告,看其他的需要看.err日誌
show processlist顯示系統中正在執行的所有程序。
show errors
啟用mysql慢查詢:---分析sql語句,找到影響效率的sql
log-slow-queries=/var/lib/mysql/slow.log 這個路徑對mysql使用者具有可寫許可權
long_query_time=2 查詢超過2秒鐘的語句記錄下來
上面的2 是查詢的時間,即當一條sql 執行時間超過5秒的時候才記錄,/var/lib/mysql/slow.log 是日誌記錄的位置。
然後重新啟動mysql服務
對查詢進行快取
query_cache_size 使用多大記憶體來快取查詢語句[+8m]
mysql> show variables like'%query%'
query_cache_size=8m
[root@st mysql]# vim /etc/my.cnf
mysql> show status like '%qcache%';
qcache_free_blocks:說明快取太大了。快取中相鄰記憶體的個數。數目大說明可能有碎片。flush query cache會對快取中的碎片進行整理,從而得到乙個空閒塊。[+8m]
qcache_free_memory快取中的空閒記憶體
qcache_hits每次查詢在快取中命中時就增大
qcache_inserts每插入乙個查詢時就增大。命中次數除以插入次數就是命中率。
qcache_lowmen_prunes快取出現記憶體不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間看;如果這個數字在不斷增長就表示可能碎片非常嚴重,或者記憶體很少
qcache_hits/qcache_inserts 命中率
關鍵字緩衝區
mysql> show status like '%key%';
mysql> show variables like'key_buffer_size';
key_buffer_size 指定索引緩衝區的大小,它決定索引處理的速度,尤其是索引讀的速度。[+8m]
key_read_requests 請求總數
key_reads 代表命中磁碟的請求個數
(key_read_requests-key_read)/key_read_requests:命中率
key_buffer_size只對myisam表起作用。即使你不使用myisam表,但是內部的臨時磁碟表是myisam表,也要使用該值。可以使用檢查狀態值created_tmp_disk_tables得知詳情。
對於1g記憶體的機器,如果不使用myisam表,推薦值是16m(8-64m)。
臨時表空間大小:order by和group by時把資料放到臨時表裡。
tmp_table_size 佔的是記憶體的大小,如果太小在排序時會出錯
created_tmp_tables 建立臨時表的數量
max_tmp_tables=32
tmpdir=/tmp 硬碟上臨時表所在的位置
innodb表:
建立表空間檔案
[mysqld]
innodb_data_file_path=ibdata1:10m:autoextend
這個設定配置乙個可擴充套件大小的尺寸為10mb的單獨檔案,名為ibdata1。沒有給出檔案的位置,所以預設的是在mysql的資料目錄內。
如果你對最後的資料檔案指定autoextend選項。如果資料檔案耗盡了表空間中的自由空間,innodb就擴充套件資料檔案。擴充套件的幅度是每次8mb。
要為乙個自動擴充套件資料檔案指定最大尺寸,請使用max屬性。下列配置允許ibdata1漲到極限的500mb:
[mysqld]
innodb_data_file_path=ibdata1:10m:autoextend:max:500m
innodb預設地在mysql資料目錄建立表空間檔案。要明確指定乙個位置,請使用innodb_data_home_dir選項。比如,要使用兩個名為ibdata1和ibdata2的檔案,但是要把他們建立到/ibdata,像如下一樣配置innodb:
[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50m;ibdata2:50m:autoextend
mysql> show variables like 'innodb_buffer_pool_size';
innodb_buffer_pool_size
對於innodb表來說,innodb_buffer_pool_size的作用就相當於key_buffer_size對於myisam表的作用一樣。innodb使用該引數指定大小的記憶體來緩衝資料和索引。對於單獨的mysql資料庫伺服器,最大可以把該值設定成物理記憶體的80%。
根據mysql手冊,對於2g記憶體的機器,推薦值是1g(50%)。
mysql> show variables like 'innodb_%per%';[建議開啟]
innodb_file_per_table =1 為每乙個表單獨建立乙個表空間檔案。
其他引數
skip-locking
取消檔案系統的外部鎖,減少出錯機率增強穩定性
skip-name-resolve
關閉mysql的dns反查功能。這樣速度就快了!
選項就能禁用dns解析,連線速度會快很多。不過,這樣的話就不能在mysql的授權表中使用主機名了而只能用ip格式。
wait_timeout=10 終止空閒時間超過10秒的鏈結,避免長連線[預設8個小時]
max_connect_errors=10 //10次連線失敗就鎖定,使用flush hosts 解鎖,
或mysqladmin flush-hosts解鎖
sql語句調優:
explain命令:查詢select。
.type
這列很重要,顯示了連線使用了哪種類別,有無使用索引
從最好到最差的連線型別為const、eq_reg、ref、range、indexhe和all
本文摘自網際網路
mysql思路 MySQL優化思路
通過指令碼,重新整理觀察mysql的status,觀察是否有週期性故障活波動,一般由訪問高峰或者快取失效引起,家快取並更改快取失效策略,是失效時間分散或頁面定時失,show processlist顯示哪些執行緒正在執行。您也可以使用mysqladmin processlist語句得到此資訊。如果您有...
mysql優化思路
為什麼別人問你mysql優化的知識 總是沒有底氣,因為你只是回答一些大而化之的調優原則,比如 1 建立合理索引 什麼樣的索引合理?2 分表分庫 用什麼策略分表分庫?3 主從分離 用什麼中介軟體?並沒有從細化到定量的層面去分析.如qps提高了 n?有沒有減少檔案排序?語句的掃瞄行數減少了多少?沒有大量...
mysql優化思路
二 mysql效能低解決思路 1 索引匹配原則 全值匹配 字首匹配 列字首匹配 匹配範圍值 只訪問索引的查詢 精確匹配某一列並範圍匹配某列2 關於sql的優化思路 1 使用explain或者desc 檢視sql的執行計畫 了解輸出項的含義,是否走索引或者索引合理。2 當sql要查詢的資料超過總記錄的...