天天看點

Database-Mysql-關于檔案打開數限制

在Mysql中,打開檔案數過多會出現too many open files錯誤。

與檔案打開數有關的參數:

1、max_connections

最大連接配接數:

增加該值會增加mysqld 要求的檔案描述符的數量。如果伺服器的并發連接配接請求量比較大,建議調高此值,以增加并行連接配接數量,當然這建立在機器能支撐的情況下,因為如果連接配接數越多,介于MySQL會為每個連接配接提供連接配接緩沖區,就會開銷越多的記憶體,是以要适當調整該值,不能盲目提高設值。

2、table_open_cache

表高速緩存數量:

當某一連接配接通路一個表時,MySQL會檢查目前已緩存表的數量。如果該表已經在緩存中打開,則會直接通路緩存中的表已加快查詢速度;如果該表未被緩存,則會将目前的表添加進緩存并進行查詢。

table_open_cache用于限制緩存表的最大數目,它的作用就是緩存表檔案描述符,如已經緩存的表未達到該值,則會将新表添加進來;若已經達到此值,MySQL會根據緩存表的最後查詢時間、查詢率等規則釋放之前的緩存。

注意:在InnoDB存儲引擎中,表的打開不受該參數限制,因為InnoDB會将其放到資料字典中,即在ibd檔案裡。

3、open_files_limit

作業系統運作mysqld打開的檔案數目,該參數基于系統啟動時指定的值。

有效的open_files_limit 計算公式如下:

  1. 10 + max_connections + (table_open_cache * 2)
  2. max_connections * 5
  3. 啟動時設定的open_files_limit,如果沒有指定預設為5000

    備注:如果open_files_limit的值未設定,會使用以上三個值中的最大值作為擷取檔案描述符的數量。

這裡需要注意的是:

1、在一個已經設定open_files_limit值的系統中,修改作業系統ulimit -n的值是不起作用的;

2、在未設定open_files_limit值的系統中,可以通過修改作業系統ulimit -n的值來完成設定;

3、兩者都需要重新開機資料庫來讓配置生效。