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
- MySQL:slave_skip_errors引數對MGR可用性的影響MySqlError
- JVM 引數調整對 sortx 的影響JVM
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 影響mysql效能的因素都有哪些MySql
- 影響MySQL效能的硬體因MySql
- 影響MySQL效能的硬體因素MySql
- Kafka之acks引數對訊息持久化的影響Kafka持久化
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- DB2 HADR對效能的影響DB2
- MySQL:簡單記錄character_set_server影響引數MySqlServer
- 瞭解 ignore_above 引數對 Elasticsearch 中磁碟使用的影響Elasticsearch
- 第49問:如何快速判斷 IO 延遲對 MySQL 效能的影響MySql
- MySQL中join語句的基本使用教程及其欄位對效能的影響MySql
- MySQL null值儲存,null效能影響MySqlNull
- MySQL影響伺服器效能的幾個方面MySql伺服器
- MySQL alter 新增列對dml影響MySql
- MySQL效能相關引數MySql
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- 分支對程式碼效能的影響和優化優化
- 怎麼減少行鎖對效能的影響?
- 容器化對資料庫的效能有影響嗎?資料庫
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- mysql事務對效率的影響分析總結JILEMySql
- 16、MySQL Case-索引key對select count(*)的影響MySql索引
- 數字化轉型的影響是什麼?數字化轉型對企業的影響?
- .net core 拋異常對效能影響的求證之路
- 大型網站的HTTPS實踐(三)——HTTPS對效能的影響網站HTTP
- JPEG的量化引數QP如何影響壓縮質量
- 【效能】Oracle表並行對邏輯遷移後查詢效能的影響Oracle並行
- mysql的DDL操作對業務產生影響測試MySql
- Sort_Buffer_Size 設定對伺服器效能的影響伺服器
- 關於資料庫開啟大頁對效能的影響資料庫
- 1.迭代次數對精確度的影響
- 影響HTTP效能的常見因素HTTP
- Java UUID生成的效能影響 – fastthreadJavaUIASTthread
- 深入理解MySQL5.7GTID系列(七)binlog_gtid_simple_recovery引數的影響總結MySql
- session效能的影響,後臺 flush dirtySession