table_open_cache引數對mysql效能的影響
Table_open_cache:表描述符快取大小,可減少檔案開啟/關閉次數;
為了避免執行緒相互干擾,每個訪問表的執行緒各自維護一個檔案描述符,多耗了記憶體但是提高了效能,即一個sql若呼叫了2次表,也需要分配2個檔案描述符;
對於MyISAM表,第一次開啟時需要兩個描述符,其中一個為索引檔案(可被後續執行緒共享);
假定系統有200個併發連線,則需將此引數設定為200*N(N為每個連線所需的檔案描述符數目);
倘若cache已滿且沒有可清理的物件,則會臨時調大該值,類似於oracle的pga設定;
可透過監控系統狀態變數opened_tables檢視此cache的繁忙程度,如果opened_tables不斷飆升且系統不執行flush tables,則考慮加大table_open_cache值;
當無法為新連線分配足夠的描述符時,會遭遇ERROR '...' not found (errno: 23)或者 Can't open file: ... (errno: 24),此時可考慮減小table_open_cache或max_connections
也可以透過open_files_limit調大mysqld可開啟的檔案數目,但依舊受shell limit所限
凡事無絕對,過大的table_open_cache也有可能會造成拖累,參照如下例子:
版本為5.0.67,該系統有81個資料庫且全為MyISAM和MyISAM merge表,在查詢information_schema下的tables表時速度奇慢
mysql> SELECT COUNT(*) FROM tables;
+----------+
| COUNT(*) |
+----------+
| 23687 |
+----------+
1 row in set (4 min 37.46 sec
另外涉及連線tables和columns兩表的sql經常遭遇 errcode:24,相關引數為open_files_limit=65535和table_cache=32768
呼叫flush tables with read lock關閉系統中所有開啟的表,然後執行上述sql同時監控相應狀態變數
admin@localhost (none)>SHOW STATUS LIKE 'open%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files | 22696 |
| Open_streams | 0 |
| Open_tables | 8095 |
| Opened_tables | 0 |
+---------------+-------+
4 rows in set (0.00 sec)
再次執行該sql
admin@localhost (none)>SHOW STATUS LIKE 'open%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files | 32848 |
| Open_streams | 0 |
| Open_tables | 12013 |
| Opened_tables | 0 |
+---------------+-------+
4 rows in set (0.00 sec
將table_open_cache降低為5000,相應sql效能反而得到提升;
原因是如果系統同時執行很多複雜sql,則table_open_cache很容易被佔滿,mysql採用線性演算法O(n)找出最近最少使用的表將其清除,當開啟的檔案過多時這一操作會比較耗時;將來的版本會引入hash演算法
對於innodb表,若為每個表各分配一個資料檔案,則innodb_open_files用來限制可以開啟的.ibd檔案數量
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14710393/viewspace-2131686/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java教程:影響MySQL效能的配置引數JavaMySql
- InnoDB 隔離模式對 MySQL 效能的影響模式MySql
- JVM 引數調整對 sortx 的影響JVM
- MySQL:slave_skip_errors引數對MGR可用性的影響MySqlError
- mysql刪除和更新操作對效能的影響MySql
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- max_connections引數對mysql初始化記憶體的影響MySql記憶體
- ASP中函式呼叫對引數的影響 (轉)函式
- Oracle Lob型別相關引數以及效能影響Oracle型別
- 引數配置 -- 最大效能模式 dataguard 不影響Production DB .模式
- 影響mysql效能的因素都有哪些MySql
- 影響MySQL效能的硬體因素MySql
- 影響MySQL效能的硬體因MySql
- Kafka之acks引數對訊息持久化的影響Kafka持久化
- 最影響Oracle系統效能的初始化引數(zt)Oracle
- 影響資料庫效能與穩定性的幾個重要引數資料庫
- mysql event對主從的影響MySql
- JAVA 異常對於效能的影響Java
- MySQL:簡單記錄character_set_server影響引數MySqlServer
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- 11g MEMORY_TARGET 引數對SGA 和PGA的影響
- 11g MEMORY_TARGET 引數對SGA 和PGA的影響
- DB2 HADR對效能的影響DB2
- 第49問:如何快速判斷 IO 延遲對 MySQL 效能的影響MySql
- 各平臺影響oracle Process數的引數(轉)Oracle
- MySQL中join語句的基本使用教程及其欄位對效能的影響MySql
- 引數Optimizer_index_cost_adj 對執行計劃的影響Index
- 瞭解 ignore_above 引數對 Elasticsearch 中磁碟使用的影響Elasticsearch
- MySQL null值儲存,null效能影響MySqlNull
- MySQL alter 新增列對dml影響MySql
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- MySQL影響伺服器效能的幾個方面MySql伺服器
- 分支對程式碼效能的影響和優化優化
- JavaScript 事件對記憶體和效能的影響JavaScript事件記憶體
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- 硬體環境對系統效能的影響
- try catch 對程式碼執行的效能影響
- 引數修改影響 sql version_countSQL