每天進步一點點————最佳化MySQL SERVER(1),每天進步一點點

來源:互聯網
上載者:User

每天進步一點點————最佳化MySQL SERVER(1),每天進步一點點
1.   最佳化MySQL SERVER7組後台進程

         masterthread:主要負責將髒快取頁面重新整理到資料檔案,執行purge操作,觸發檢查點,合并插入緩衝區等。

         insertbuffer thread:主要負責插入緩衝區的合併作業。

         readthread:負責資料庫讀取操作,可配置多個線程

         writethread:負責資料庫寫操作,可配置多個線程。

         logthread:用於將重做日誌重新整理到logfile中。

         purgethread:MySQL5.5之後用於單獨的purge thread 執行purge操作。

         lockthread:負責鎖控制和死結檢測。

         錯誤監控線程:主要負責錯誤監控和錯誤處理。

記憶體管理及最佳化記憶體管理原則

在調整MySQL記憶體配置時,要注意以下幾點。

         將盡量多的記憶體配置給MySQL做緩衝,但是要給作業系統和其他程式的運行預留足夠的記憶體,否則如果產生SWAP頁交換,將嚴重影響系統效能。

         MyISAM的資料檔案讀取依賴作業系統自身IO緩衝,因此,如果有MyISAM表,就要預留更多的記憶體給作業系統做IO緩衝。

         排序區、串連區等緩衝是分配給每個資料庫會話(seesion)專用的,其預設值的設定要根據最大串連數合理分配,如果設定太大,不但浪費記憶體資源,而且在並發串連較高時會導致實體記憶體消耗盡。

MyISAM記憶體最佳化

MyISAM儲存引擎使用 key buffer緩衝索引塊,以加速MyISAM索引的讀寫速度。對於MyISAM變的資料庫塊,MySQL沒有鐵別的緩衝機制,完全依賴作業系統的IO緩衝。

key_buffer_size設定

key_buffer_size決定MyISAM索引塊緩衝區的大小,直接影響到MyISAM表的存取效率。可以在MySQL參數檔案中設定key_buffer_size的值,對於一般MyISAM資料庫,建議至少將1/4可用記憶體分配給key_buffer_size。

我們可以通過檢查key_read_requests、key_reads、key_write_requests和key_writes等MySQL狀態來評估索引緩衝的效率。一般來說,索引塊物理讀比率key_reads/key_read_requests應該小於0.01。索引塊寫比率key_wirte/key_write_requests也應儘可能小。但是這與應用特點有關,對於更新和刪除操作特別多的應用,key_writes/key_wirte_requests可能會接近1,而對於 更新很多行記錄的應用,key_wirtes/key_write_requests就會比較小。

除了通過索引塊的物理讀寫比率衡量key_buffer的效率外,我們也可以通過評估key buffer的使用率來判斷索引緩衝設定是否合理。key buffer使用率計算公式如下:

         1-((key_blocks_unused*key_cache_block_size)/key_buffer_size)

         一般來說,使用率在80%左右筆記哦啊合適,大於80%可能因索引還粗不足而導致效能下降,小於80%會導致記憶體浪費

設定key_buffer_size

mysql>set global key_buffer_size=8088608;

Query OK, 0 rows affected, 1 warning (0.00sec)

永久設定

[root@localhostbinlog]# vim /etc/my.sql

[mysql]

key_buffer_size=8088608

查看key_buffer_size

mysql> show variables like'key_buffer_size';

+-----------------+---------+

| Variable_name   | Value  |

+-----------------+---------+

| key_buffer_size | 8388608 |

+-----------------+---------+

1 row in set (0.00 sec)

 

mysql>show global status like 'key_%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| Key_blocks_not_flushed | 0     |

| Key_blocks_unused      | 6452 |

| Key_blocks_used        | 0    |

| Key_read_requests      | 0    |

| Key_reads              | 0     |

| Key_write_requests     | 0    |

| Key_writes             | 0     |

+------------------------+-------+

7 rows in set (0.00 sec)

使用多個索引緩衝

MySQL通過session共用的key buffer提高了MyISAM索引存取的效能,但是冰不能消除session間對key buffer的競爭。比如一個session如果對某個很大的索引進行掃描,就可能將其他的索引資料基礎索引緩衝區,而這些索引塊可能是其他session要用的熱資料。

建立key buffer

mysql>set global hot_cache.key_buffer_size=128*1024;

Query OK, 0 rows affected (0.01 sec)

hot_cache是建立索引的緩衝名。

刪除key buffer

mysql>set global hot_cache.key_buffer_size=0;

Query OK, 0 rows affected (0.01 sec)

但是我們不能刪除預設的keybuffer

將某個表的索引加入到建立的key buffer中

mysql>cache index t1 in hot_cache;

+----------+--------------------+----------+----------+

| Table   | Op                 | Msg_type |Msg_text |

+----------+--------------------+----------+----------+

| test2.t1 | assign_to_keycache |status   | OK       |

+----------+--------------------+----------+----------+

1 row in set (0.00 sec)

T1表示T1表

 

在設定檔自動建立並載入索引緩衝

[root@localhostbinlog]# vim /etc/my.sql

[mysql]

key_buffer_size=8088608

hot_cache.key_buffer_size=128*1024

cold_cache.key_buffer_size=1G

init_file=/usr/local/mysql/config/mysqld_init.sql

[root@localhostbinlog]# vim /usr/local/mysql/config/mysqld_init.sql
cache index t1 hot_cache

cache index t2 cold_cache;

load index into cache t1,t2;

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.