- 論壇徽章:
- 0
|
mysql tmp_table_size 這個(gè)變量決定了內(nèi)存中臨時(shí)表的大小,每個(gè)線程都有一個(gè)。如果表變得特別大,myisam表就會(huì)被建在磁盤上。 優(yōu)化查詢語(yǔ)句的時(shí)候,要避免使用臨時(shí)表,如果實(shí)在避免不了的話,要保證這些臨時(shí)表是存在內(nèi)存中的。 查看帶臨時(shí)表的查詢語(yǔ)句的執(zhí)行過(guò)程,這樣你就可以得到需要改進(jìn)的臨時(shí)表。需要注意的是臨時(shí)表的內(nèi) 存大小是為每個(gè)線程都分配的。 如果你有復(fù)雜的查詢語(yǔ)句,sort_buffer_size和tmp_table_size就可能非常有用。 如果臨時(shí)myisam表,小于或等于tmp_table_size的時(shí)候,MySQL就會(huì)把它保存在內(nèi)存中,否則,就會(huì)把這 些數(shù)據(jù)寫到磁盤上,需要的時(shí)候重新讀取。如果需要的空間超過(guò)了tmp_table_size的大小,MySQL就會(huì)在 tmpdir目錄下創(chuàng)建基于磁盤的表。 怎樣覺(jué)得tmp_table_size的大。 對(duì)比Created_tmp_tables和Created_tmp_disk_tables計(jì)數(shù)器。如果Created_tmp_tables不比Created_tmp_disk_tables 大的多的話(比如大約20被:5%),你就需要增加Created_tmp_tables的值。大致目標(biāo)是: Created_tmp_disk_tables是Created_tmp_tables的2%.
我的值是: tmp_table_size(默認(rèn)32M)=128M(之前1:96M有15% 之前2:128M有2%的比率建在磁盤上) max_heap_table_size=default 16MB(和tmp_table_size一樣的heap類型表) read_buffer_size(默認(rèn)128KB)=2M 嘗試4M(my-huge 建議2M) sort_buffer_size=6M(之前:4M,my-huge 建議2M) 改進(jìn)大的復(fù)雜的排序語(yǔ)句,每個(gè)線程都需要分配排序buffer大小,如果想要order by或group by 更快的話,增加這些值。 read_rnd_buffer_size(dafault 126-256KB 范圍)=4M(之前:2M) 當(dāng)排序后以排序后的順序讀取行時(shí),這些行在buffer里存著,避免搜索磁盤。設(shè)置這個(gè)值大些,能相當(dāng)?shù)馗倪M(jìn) order by的性能。 join_buffer_size(默認(rèn)128KB)=2M 嘗試4M max_tmp_tables(默認(rèn)32)=64 同一時(shí)刻,一個(gè)客戶端能保持打開(kāi)臨時(shí)表的最大個(gè)數(shù)。 myisam_sort_buffer_size=64M 這個(gè)buffer被分配的情況是在repair table期間排序MYISAM索引或者create index或者alter table時(shí)創(chuàng)建索引。 注意:這些是"每個(gè)連接"的值,read_buffer_size,read_rnd_buffer_size和一些其它的值,意思是這些值可能 是每個(gè)連接都需要的。所以,當(dāng)設(shè)置這些參數(shù)的時(shí)候,考慮你的負(fù)載和可變資源。例如,sort_buffer_size只有在 MySQL排序的時(shí)候,才被分配。 重要提示:不要耗盡memory。
如果一個(gè)內(nèi)部heap表超過(guò)了tmp_table_size的大小,MySQL就會(huì)自動(dòng)把內(nèi)存中的heap表創(chuàng)建到磁盤上。你也可以增加 tmp_table_size的值,或者在客戶端程序中,設(shè)置SQL選項(xiàng):SQL_BIG_TABLES。 |
|