發現當前一個配置問題 (mysql +linux 在線系統)
show global status like open%tables%;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 966 |
| Opened_tables | 2919 |
+---------------+-------+
2 rows in set
根據這些天潛心研究 (下面是有關知識)
table_cache指示表高速緩存的大小。當Mysql訪問一個表時,如果在Mysql表緩沖區中還有空間,那麼這個表就被打開並放入表緩沖區,這樣做的好處是可以更快速地訪問表中的內容。一般來說,可以通過查看數據庫運行峰值時間的狀態值Open_tables和Opened_tables,用以判斷是否需要增加table_cache的值
show global status like open%tables%;查看打開表的情況
Open_tables表示打開表的數量,Opened_tables表示打開過的表數量,如果Opened_tables數量過大,說明配置中table_cache(5.1.3之後這個值叫做table_open_cache)值可能太小。
比較適合的值:
Open_tables / Opened_tables * 100% >= 85%
Open_tables / table_cache * 100% <= 95%
當前我設置這個在線db的 table_cache=1024
由此引發一個問題
966/2919 僅僅為33% 這個是明顯有問題的。 (這個系統是主機 有從機器從他那裡取數據)
請問我究竟該如何設置這個值 table_cache=??
--------------------------------------------------------------------------------
參數優化基於一個前提,就是在我們的數據庫中通常都使用InnoDB表,而不使用MyISAM表。在優化MySQL時,有兩個配置參數是最重要的,即table_cache和key_buffer_size。
table_cache
table_cache指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間,該表就被打開並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發現 open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables’獲得)。注意,不能盲目地把table_cache設置成很大的值。如果設置得太高,可能會造成文件描述符不足,從而造成性能不穩定或者連接失
table_cache – 64
open_tables – 64
opened-tables – 431
uptime – 1662790 (measured in seconds)
雖然open_tables已經等於table_cache,但是相對於服務器運行時間來說,opened_tables的值也非常低。因此,增加table_cache的值應該用處不大。
目前從找的材料看 沒有必要修改
--------------------------------------------------------------------------------
mysql> SHOW STATUS LIKE key_read%;
+-------------------+------------+
| Variable_name | Value |
+-------------------+------------+
| Key_read_requests | 1430416782 |
| Key_reads | 269031 |
+-------------------+------------+
2 rows in set
[3:42:39 PM] bruce: 總的內存需求公式是:global buffer + connections* buffer per connection.
global buffer包括:key_buffer_size & innodb_buffer_size
buffer per connection:一般按照4M計算(最差情況),包括:read_buffer, sort_buffer, thread stack,等等。
[3:47:04 PM] bruce: key_buffer_size只對MyISAM表起作用,
key_buffer_size指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設為 16M,實際上稍微大一點的站點 這個數字是遠遠不夠的,通過檢查狀態值Key_read_requests和 Key_reads,可以知道key_buffer_size設置是否合理。比例key_reads / key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。 或者如果你裝了phpmyadmin 可以通過服務器運行狀態看到,筆者推薦用phpmyadmin管理mysql,以下的狀態值都是本人通過phpmyadmin獲得的實例分析:
這個服務器已經運行了20天
key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112