MySQL 可調節設置可以應用于整個 mysqld進程,也可以應用于單個客戶機會話。
服務器端的設置
每個表都可以表示為磁盤上的一個文件,必須先打開,后讀取。為了加快從文件中讀取數據的過程,mysqld對這些打開文件進行了緩存,其最大數目由 /etc/mysqld.conf 中的table_cache 指定。清單 4給出了顯示與打開表有關的活動的方式。
清單 4. 顯示打開表的活動
| mysql> SHOW STATUS LIKE 'open%tables';+---------------+-------+| Variable_name | Value |+---------------+-------+| Open_tables | 5000 || Opened_tables | 195 |+---------------+-------+2 rows in set (0.00 sec) |
清單 4 說明目前有 5,000 個表是打開的,有 195個表需要打開,因為現在緩存中已經沒有可用文件描述符了(由于統計信息在前面已經清除了,因此可能會存在 5,000 個打開表中只有 195個打開記錄的情況)。如果 Opened_tables 隨著重新運行SHOW STATUS 命令快速增加,就說明緩存命中率不夠。如果Open_tables 比table_cache設置小很多,就說明該值太大了(不過有空間可以增長總不是什么壞事)。例如,使用 table_cache =5000 可以調整表的緩存。
與表的緩存類似,對于線程來說也有一個緩存。 mysqld在接收連接時會根據需要生成線程。在一個連接變化很快的繁忙服務器上,對線程進行緩存便于以后使用可以加快最初的連接。
清單 5 顯示如何確定是否緩存了足夠的線程。
清單 5. 顯示線程使用統計信息
| mysql> SHOW STATUS LIKE 'threads%';+-------------------+--------+| Variable_name | Value |+-------------------+--------+| Threads_cached | 27 || Threads_connected | 15 || Threads_created | 838610 || Threads_running | 3 |+-------------------+--------+4 rows in set (0.00 sec) |
此處重要的值是 Threads_created,每次mysqld 需要創建一個新線程時,這個值都會增加。如果這個數字在連續執行SHOW STATUS 命令時快速增加,就應該嘗試增大線程緩存。例如,可以在my.cnf 中使用 thread_cache = 40 來實現此目的。
關鍵字緩沖區保存了 MyISAM 表的索引塊。理想情況下,對于這些塊的請求應該來自于內存,而不是來自于磁盤。清單 6顯示了如何確定有多少塊是從磁盤中讀取的,以及有多少塊是從內存中讀取的。
清單 6. 確定關鍵字效率
| mysql> show status like '%key_read%';+-------------------+-----------+| Variable_name | Value |+-------------------+-----------+| Key_read_requests | 163554268 || Key_reads | 98247 |+-------------------+-----------+2 rows in set (0.00 sec) |
Key_reads 代表命中磁盤的請求個數,Key_read_requests是總數。命中磁盤的讀請求數除以讀請求總數就是不中比率 —— 在本例中每 1,000 個請求,大約有 0.6 個沒有命中內存。如果每1,000 個請求中命中磁盤的數目超過 1 個,就應該考慮增大關鍵字緩沖區了。例如,key_buffer =384M 會將緩沖區設置為 384MB。
新聞熱點
疑難解答