跟进table_cache参数
生活随笔
收集整理的這篇文章主要介紹了
跟进table_cache参数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看了hiro對于table cache的介紹,我也進行了一些相關的操作,發現一個有趣的現象。
mysql> show open tables;
+———–+————————–+——–+————-+
| Database? | Table??????????????????? | In_use | Name_locked |
+———–+————————–+——–+————-+
| bbs?????? | sql_access?????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_caches?????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_ranks????????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_modworks????????|????? 0 |?????????? 0 |
| bbs?????? | sql_adminnotes??????|????? 0 |?????????? 0 |
| bbs?????? | sql_p_w_picpathtypes???????|????? 0 |?????????? 0 |
…
…
| bbs?????? | sql_reportlog??????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_searchindex?????? |????? 0 |?????????? 0 |
+———–+————————–+——–+————-+
120 rows in set (0.00 sec) mysql> show global status like ‘open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables?? | 124?? |
+—————+——-+
1 row in set (0.00 sec) 不知道大家有沒有發現,前者得到打開表的數量是120;后者卻是124。為什么會有這樣的不同呢? mysql> flush tables;
Query OK, 0 rows affected (0.17 sec)
而我在flush tables之后兩者的顯示結果又得到相同的value,都是11。
mysql> show global status like ‘open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables?? | 11??? |
+—————+——-+
1 row in set (0.00 sec) mysql> show open tables;
+———–+————————–+——–+————-+
| Database? | Table??????????????????? | In_use | Name_locked |
+———–+————————–+——–+————-+
| wordpress | wp_postmeta????????????? |????? 0 |?????????? 0 |
| wordpress | wp_wp_super_edit_options |????? 0 |?????????? 0 |
| wordpress | wp_terms???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_options?????????????? |????? 0 |?????????? 0 |
| wordpress | wp_wp_super_edit_plugins |????? 0 |?????????? 0 |
| wordpress | wp_links???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_usermeta????????????? |????? 0 |?????????? 0 |
| wordpress | wp_term_taxonomy???????? |????? 0 |?????????? 0 |
| wordpress | wp_posts???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_users???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_term_relationships??? |????? 0 |?????????? 0 |
+———–+————————–+——–+————-+
11 rows in set (0.00 sec) table_cache表示數據庫用戶打開表的緩存數量。每個連接進來,都會至少打開一個表緩存;那是不是說有些連接會打開兩個或多個,而使得兩者的結果略有差別呢?還有就是,我們都知道MySQL是個多線程數據庫,這樣也就會發生有多個不同的用戶同時對一個指定的表發出查詢請求,這樣也會增加open tables的數量,因為他們會各自獨立的去使用自己的表緩存。 我們都知道open_tables表示當前打開的表緩存數,是個不穩定紀錄,也就是說flush tables之后可以被清空;而opened_tables是一個牢固紀錄,不會因此而影響,而是會不斷的做有效累加。open_tables不能超過table_cach的上限,如果它變得很大或是增長太快,即便你還沒有去執行flush tables這個語句,最好的辦法是去增大table_cache的大小,因為有可能flush tables之后還是沒有效果。 關于table_cache的設置,我們的原則是要清楚系統能夠處理的由有table_cache所提供的打開文件描述符數量。如果它的值設置太大,MySQL可能會耗盡所有文件描述符,同時拒絕連接,使得執行查詢失敗;如果設置過于低,同樣也會影響MySQL的性能。一般來說,我們會通過open_tables的值去衡量table_cache的大小是否能夠滿足查詢需求;如果我們充足的內存,那么我們可以適當地去加大table_cache的值。 ulimit -a可以查看文件描述符。
mysql> show open tables;
+———–+————————–+——–+————-+
| Database? | Table??????????????????? | In_use | Name_locked |
+———–+————————–+——–+————-+
| bbs?????? | sql_access?????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_caches?????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_ranks????????????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_modworks????????|????? 0 |?????????? 0 |
| bbs?????? | sql_adminnotes??????|????? 0 |?????????? 0 |
| bbs?????? | sql_p_w_picpathtypes???????|????? 0 |?????????? 0 |
…
…
| bbs?????? | sql_reportlog??????????? |????? 0 |?????????? 0 |
| bbs?????? | sql_searchindex?????? |????? 0 |?????????? 0 |
+———–+————————–+——–+————-+
120 rows in set (0.00 sec) mysql> show global status like ‘open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables?? | 124?? |
+—————+——-+
1 row in set (0.00 sec) 不知道大家有沒有發現,前者得到打開表的數量是120;后者卻是124。為什么會有這樣的不同呢? mysql> flush tables;
Query OK, 0 rows affected (0.17 sec)
而我在flush tables之后兩者的顯示結果又得到相同的value,都是11。
mysql> show global status like ‘open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables?? | 11??? |
+—————+——-+
1 row in set (0.00 sec) mysql> show open tables;
+———–+————————–+——–+————-+
| Database? | Table??????????????????? | In_use | Name_locked |
+———–+————————–+——–+————-+
| wordpress | wp_postmeta????????????? |????? 0 |?????????? 0 |
| wordpress | wp_wp_super_edit_options |????? 0 |?????????? 0 |
| wordpress | wp_terms???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_options?????????????? |????? 0 |?????????? 0 |
| wordpress | wp_wp_super_edit_plugins |????? 0 |?????????? 0 |
| wordpress | wp_links???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_usermeta????????????? |????? 0 |?????????? 0 |
| wordpress | wp_term_taxonomy???????? |????? 0 |?????????? 0 |
| wordpress | wp_posts???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_users???????????????? |????? 0 |?????????? 0 |
| wordpress | wp_term_relationships??? |????? 0 |?????????? 0 |
+———–+————————–+——–+————-+
11 rows in set (0.00 sec) table_cache表示數據庫用戶打開表的緩存數量。每個連接進來,都會至少打開一個表緩存;那是不是說有些連接會打開兩個或多個,而使得兩者的結果略有差別呢?還有就是,我們都知道MySQL是個多線程數據庫,這樣也就會發生有多個不同的用戶同時對一個指定的表發出查詢請求,這樣也會增加open tables的數量,因為他們會各自獨立的去使用自己的表緩存。 我們都知道open_tables表示當前打開的表緩存數,是個不穩定紀錄,也就是說flush tables之后可以被清空;而opened_tables是一個牢固紀錄,不會因此而影響,而是會不斷的做有效累加。open_tables不能超過table_cach的上限,如果它變得很大或是增長太快,即便你還沒有去執行flush tables這個語句,最好的辦法是去增大table_cache的大小,因為有可能flush tables之后還是沒有效果。 關于table_cache的設置,我們的原則是要清楚系統能夠處理的由有table_cache所提供的打開文件描述符數量。如果它的值設置太大,MySQL可能會耗盡所有文件描述符,同時拒絕連接,使得執行查詢失敗;如果設置過于低,同樣也會影響MySQL的性能。一般來說,我們會通過open_tables的值去衡量table_cache的大小是否能夠滿足查詢需求;如果我們充足的內存,那么我們可以適當地去加大table_cache的值。 ulimit -a可以查看文件描述符。
轉載于:https://blog.51cto.com/tech110/269483
總結
以上是生活随笔為你收集整理的跟进table_cache参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的选车经历--学习比经验更重要
- 下一篇: SQL Server 2005 COM+