Mysql 優(yōu)化

mysql 優(yōu)化(簡單的測試初狰,僅供參考)

查看mysql配置

show variables;

查看MySQL服務(wù)器運行的各種狀態(tài)值

show global status;

查看有多少慢查詢

show variables like '%slow%';

mysql 的鏈接數(shù)

show variables like 'max_connections';
show global status like 'max_used_connections';
-- max_used_connections / max_connections * 100% = ~ (理想值 ≈ 85%)

key_buffer_size是對MyISAM表性能影響最大的一個參數(shù), 不過數(shù)據(jù)庫中多為Innodb

show variables like 'key_buffer_size';
show global status like 'key_read%';
-- 計算索引未命中緩存的概率 key_cache_miss_rate = Key_reads / Key_read_requests * 100% 

Key_blocks_unused表示未使用的緩存簇(blocks)數(shù)捍靠,Key_blocks_used表示曾經(jīng)用到的最大的blocks數(shù)

show global status like 'key_blocks_u%';
-- Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈  ~(理想值 ≈ 80%)

臨時表

show global status like 'created_tmp%';
-- 每次創(chuàng)建臨時表阴挣,Created_tmp_tables增加畏线,如果是在磁盤上創(chuàng)建臨時表投队,Created_tmp_disk_tables
-- 也增加,Created_tmp_files表示MySQL服務(wù)創(chuàng)建的臨時文件文件數(shù): 
-- Created_tmp_disk_tables / Created_tmp_tables * 100% = ~(理想值<= 25%)
show variables where Variable_name in ('tmp_table_size', 'max_heap_table_size');

open table 的情況

show global status like 'open%tables%';
-- Open_tables 表示打開表的數(shù)量八千,Opened_tables表示打開過的表數(shù)量馍惹,如果Opened_tables數(shù)量過
-- 大,說明配置中 table_cache(5.1.3之后這個值叫做table_open_cache)值可能太小龙宏,我們查詢一下服務(wù)
-- 器table_cache值 
show variables like 'table_cache';
-- Open_tables / Opened_tables * 100% =~ 理想值 (>= 85%) 
-- Open_tables / table_cache * 100% = ~ 理想值 (<= 95%) 

進程使用情況

show global status like 'Thread%';
-- 如果我們在MySQL服務(wù)器配置文件中設(shè)置了thread_cache_size棵逊,當(dāng)客戶端斷開之后,服務(wù)器處理此客
-- 戶的線程將會緩存起來以響應(yīng)下一個客戶而不是銷毀(前提是緩存數(shù)未達上限)银酗。Threads_created表
-- 示創(chuàng)建過的線程數(shù)辆影,如果發(fā)現(xiàn)Threads_created值過大的話徒像,表明 MySQL服務(wù)器一直在創(chuàng)建線程,這也
-- 是比較耗資源蛙讥,可以適當(dāng)增加配置文件中thread_cache_size值锯蛀,查詢服務(wù)器 thread_cache_size配置:
show variables like 'thread_cache_size';

查詢緩存(query cache)

show global status like 'qcache%';  
Qcache_free_blocks:緩存中相鄰內(nèi)存塊的個數(shù)。數(shù)目大說明可能有碎片键菱。FLUSH QUERY CACHE會對緩存中的碎片進行整理谬墙,從而得到一個空閑塊。 
Qcache_free_memory:緩存中的空閑內(nèi)存经备。 
Qcache_hits:每次查詢在緩存中命中時就增大 
Qcache_inserts:每次插入一個查詢時就增大拭抬。命中次數(shù)除以插入次數(shù)就是不中比率。 
Qcache_lowmem_prunes:緩存出現(xiàn)內(nèi)存不足并且必須要進行清理以便為更多查詢提供空間的次數(shù)侵蒙。這個數(shù)字最好長時間來看造虎;如果這個數(shù)字在不斷增長,就表示可能碎片非常嚴(yán)重纷闺,或者內(nèi)存很少算凿。(上面的          free_blocks和free_memory可以告訴您屬于哪種情況) 
Qcache_not_cached:不適合進行緩存的查詢的數(shù)量,通常是由于這些查詢不是 SELECT 語句或者用了now()之類的函數(shù)犁功。 
Qcache_queries_in_cache:當(dāng)前緩存的查詢(和響應(yīng))的數(shù)量氓轰。 
Qcache_total_blocks:緩存中塊的數(shù)量。

我們再查詢一下服務(wù)器關(guān)于query_cache的配置:

show variables like 'query_cache%'; 

各字段的解釋:

query_cache_limit:超過此大小的查詢將不緩存 
query_cache_min_res_unit:緩存塊的最小大小 
query_cache_size:查詢緩存大小 
query_cache_type:緩存類型浸卦,決定緩存什么樣的查詢署鸡,示例中表示不緩存 select sql_no_cache 查詢 
query_cache_wlock_invalidate:當(dāng)有其他客戶端正在對MyISAM表進行寫操作時,如果查詢在query cache中限嫌,是否返回cache結(jié)果還是等寫操作完成再讀表獲取結(jié)果靴庆。 
query_cache_min_res_unit的配置是一柄”雙刃劍”,默認是4KB怒医,設(shè)置值大對大數(shù)據(jù)查詢有好處炉抒,但如果你的查詢都是小數(shù)據(jù)查詢,就容易造成內(nèi)存碎片和浪費稚叹。 
查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100% 
如果查詢緩存碎片率超過20%焰薄,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit扒袖,如果你的查詢都是小數(shù)據(jù)量的話塞茅。 
查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100% 
查詢緩存利用率在25%以下的話說明query_cache_size設(shè)置的過大,可適當(dāng)減辛鸥濉;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小蟀伸,要不就是碎片太多蚀同。 
查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100% 
示例服務(wù)器 查詢緩存碎片率 = 20.46%缅刽,查詢緩存利用率 = 62.26%,查詢緩存命中率 = 1.94%蠢络,命中率很差衰猛,可能寫操作比較頻繁吧,而且可能有些碎片

排序使用情況

show global status like 'sort%'; 
Sort_merge_passes 包括兩步刹孔。MySQL 首先會嘗試在內(nèi)存中做排序啡省,使用的內(nèi)存大小由系統(tǒng)變量 Sort_buffer_size 決定,如果它的大小不夠把所有的記錄都讀到內(nèi)存中髓霞,MySQL 就會把每次在內(nèi)存中排序的結(jié)果存到臨時文件中卦睹,等 MySQL 找到所有記錄之后,再把臨時文件中的記錄做一次排序方库。這再次排序就會增加 Sort_merge_passes结序。實際上,MySQL 會用另一個臨時文件來存再次排序的結(jié)果纵潦,所以通常會看到 Sort_merge_passes 增加的數(shù)值是建臨時文件數(shù)的兩倍徐鹤。因為用到了臨時文件,所以速度可能會比較慢邀层,增加 Sort_buffer_size 會減少 Sort_merge_passes 和 創(chuàng)建臨時文件的次數(shù)返敬。但盲目的增加 Sort_buffer_size 并不一定能提高速度,見 How fast can you sort data with MySQL?(引自http://qroom.blogspot.com/2007/09/mysql-select-sort.html) 
另外寥院,增加read_rnd_buffer_size(3.2.3是record_rnd_buffer_size)的值對排序的操作也有一點的好處劲赠,參見:http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is- read_rnd_buffer_size/ 

文件打開數(shù)(open_files)

show global status like 'open_files';
show variables like 'open_files_limit';
-- 比較合適的設(shè)置:Open_files / open_files_limit * 100% <= 75% 

表鎖情況

show global status like 'table_locks%';
-- Table_locks_immediate 表示立即釋放表鎖數(shù),Table_locks_waited表示需要等待的表鎖數(shù)只磷,如果 
-- Table_locks_immediate / Table_locks_waited > 5000经磅,最好采用InnoDB引擎,因為InnoDB是行鎖而
-- MyISAM是表鎖钮追,對于高并發(fā)寫入的應(yīng)用InnoDB效果會好些. 

表掃描情況

show global status like 'handler_read%';

各字段解釋參見http://hi.baidu.com/thinkinginlamp/blog/item/31690cd7c4bc5cdaa144df9c.html预厌,調(diào)出服務(wù)器完成的查詢請求次數(shù)

show global status like 'com_select';
-- 計算表掃描率: 
-- 表掃描率 = Handler_read_rnd_next / Com_select 
-- 如果表掃描率超過4000,說明進行了太多表掃描元媚,很有可能索引沒有建好轧叽,增加read_buffer_size值會
-- 有一些好處,但最好不要超過8MB刊棕。



文章來源<(-

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炭晒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甥角,更是在濱河造成了極大的恐慌网严,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗤无,死亡現(xiàn)場離奇詭異震束,居然都是意外死亡怜庸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門垢村,熙熙樓的掌柜王于貴愁眉苦臉地迎上來割疾,“玉大人,你說我怎么就攤上這事嘉栓『觊牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵侵佃,是天一觀的道長麻昼。 經(jīng)常有香客問我,道長趣钱,這世上最難降的妖魔是什么涌献? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮首有,結(jié)果婚禮上燕垃,老公的妹妹穿的比我還像新娘。我一直安慰自己井联,他們只是感情好卜壕,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烙常,像睡著了一般轴捎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚕脏,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天侦副,我揣著相機與錄音,去河邊找鬼驼鞭。 笑死秦驯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挣棕。 我是一名探鬼主播译隘,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洛心!你這毒婦竟也來了固耘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤词身,失蹤者是張志新(化名)和其女友劉穎厅目,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡损敷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年户辫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗤锉。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖墓塌,靈堂內(nèi)的尸體忽然破棺而出瘟忱,到底是詐尸還是另有隱情,我是刑警寧澤苫幢,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布访诱,位于F島的核電站,受9級特大地震影響韩肝,放射性物質(zhì)發(fā)生泄漏触菜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一哀峻、第九天 我趴在偏房一處隱蔽的房頂上張望涡相。 院中可真熱鬧,春花似錦剩蟀、人聲如沸催蝗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丙号。三九已至,卻和暖如春缰冤,著一層夾襖步出監(jiān)牢的瞬間犬缨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工棉浸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怀薛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓涮拗,卻偏偏與公主長得像乾戏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子三热,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容