針對(duì)16G內(nèi)存的配置
先說下tmp_table_size吧:
它規(guī)定了內(nèi)部?jī)?nèi)存臨時(shí)表的最大值,每個(gè)線程都要分配。(實(shí)際起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果內(nèi)存臨時(shí)表超出了限制,MySQL就會(huì)自動(dòng)地把它轉(zhuǎn)化為基于磁盤的MyISAM表,存儲(chǔ)在指定的tmpdir目錄下,默認(rèn):
mysql> show variables like "tmpdir";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir | /tmp/ |
+---------------+-------+
優(yōu)化查詢語句的時(shí)候,要避免使用臨時(shí)表,如果實(shí)在避免不了的話,要保證這些臨時(shí)表是存在內(nèi)存中的。如果需要的話并且你有很多group by語句,并且你有很多內(nèi)存,增大tmp_table_size(和max_heap_table_size)的值。這個(gè)變量不適用與用戶創(chuàng)建的內(nèi)存表(memory table).
你可以比較內(nèi)部基于磁盤的臨時(shí)表的總數(shù)和創(chuàng)建在內(nèi)存中的臨時(shí)表的總數(shù)(Created_tmp_disk_tables和Created_tmp_tables),一般的比例關(guān)系是:
Created_tmp_disk_tables/Created_tmp_tables<5%
這個(gè)變量定義了用戶可以創(chuàng)建的內(nèi)存表(memory table)的大小.這個(gè)值用來計(jì)算內(nèi)存表的最大行數(shù)值。這個(gè)變量支持動(dòng)態(tài)改變,即set @max_heap_table_size=#
,但是對(duì)于已經(jīng)存在的內(nèi)存表就沒有什么用了,除非這個(gè)表被重新創(chuàng)建(create table)或者修改(alter table)或者truncate table。服務(wù)重啟也會(huì)設(shè)置已經(jīng)存在的內(nèi)存表為全局max_heap_table_size的值。
這個(gè)變量和tmp_table_size一起限制了內(nèi)部?jī)?nèi)存表的大小。
如果想知道更詳細(xì)的信息,請(qǐng)參考“MySQL是怎樣使用內(nèi)部臨時(shí)表的?”和“內(nèi)存存儲(chǔ)引擎”
新聞熱點(diǎn)
疑難解答
圖片精選