高效能的MySQL(8)優化伺服器配置一記憶體

2021-09-21 10:28:09 字數 2613 閱讀 7053

配置mysql伺服器離不開配置檔案,接下來就開始這一部分的內容。

首先一定要清楚配置檔案的位置,如果不知道可以嘗試下面的操作:

1

2

3

4

/usr/local/mysql/bin/mysqld--verbose --help |grep-a 1'default options'

#結果如下

default options arereadfrom the following filesinthe given order:

/etc/my.cnf/etc/mysql/my.cnf/usr/local/mysql/etc/my.cnf ~/.my.cnf

有時候可以使用show global status 的輸出來看狀態,有的時候也需要看隨著時間的變化而變化的狀態值,可以使用命令:

1

/usr/local/mysql/bin/mysqladminextended-status -ri60 -uroot -p123456

接下來看看記憶體的配置使用了。

mysql可以使用的記憶體會受到作業系統位數的限制,mysql保持乙個連線(執行緒)只需要少量的記憶體,同時也需要為高峰時期執行大量查詢預留好足夠的記憶體。

下面是我們認為比較重要的快取:

a、innodb緩衝池

b、innodb日誌檔案和myisam資料的作業系統快取

c、myisam鍵快取

d、查詢快取

innodb緩衝池並不僅僅快取索引,還會快取行的資料,自適應雜湊索引,插入緩衝,鎖,以及其他內部資料結構。很大的緩衝池,預熱和關閉都很話費很長時間,重啟伺服器也會話費很長的時間,尤其是磁碟很慢的時候,可以使用percona server的快速預熱功能,如果不能使用可以在重啟時立刻進行全表掃瞄或者索引掃瞄,把索引載入緩衝池。可以通過使用init_file設定來實現這個功能。

如果大部分表都是mysiam表,就應該為鍵快取分配比較多的記憶體。最重要的配置是key_buffer_size,在決定鍵快取需要分配多少記憶體之前,需要先了解mysiam索引實際占用多少空間。查詢information_schem表的index_length欄位,把他們的值相加就可以得到索引占用空間。如下:

linux下也可以使用如下命令:

1

du-sch `find/path/to/mysql/data/directory/-name"*.myi"`

預設情況下,mysiam將所有索引都快取在預設的鍵快取中,但也可以建立多個命名的鍵,可以在配置檔案中新增如下

key_buffer_1.key_buffer_size=1g

key_buffer_2.key_buffer_size=1g

可以使用cache index 命令來將表對映到對應的緩衝區,比如下面的語句,使用key_buffer_1來快取t1和t2表的索引

1

cacheindext1,t2inkey_buffer_1;

也可以把錶的索引預載入快取中,如下命令:

1

loadindexintocache t1,t2;

即使全部是innodb表,沒有mysiam表,依然需要將key_buffer_size設定為乙個較小的值,因為伺服器有時會在內部使用mysiam,例如group by語句可能會使用mysiam作為臨時表。

執行緒快取儲存那些當前沒有連線但是準備為後面的連線服務的執行緒,thread_cache_size變數指定了mysql可以保持在快取中的執行緒數。

乙個好的辦法是觀察threads_connected變數並且嘗試thread_cache_size,沒有必要設定的非常大。

innodb有自己的表快取,可以稱為資料字典,當innodb開啟乙個表就增加了乙個對應的物件到資料字典,當表關閉的時候也不會從資料字典移除。

另乙個效能問題是第一次開啟表會計算統計資訊,這需要很多的i/o操作,相比mysiam,innodb沒有將統計資訊持久化,而是在每次開啟時重新計算,包括改變表的內容或者查詢information_schema表也會重新計算統計資訊,如果有很多表,伺服器可能會花費數個小時來啟動並完成預熱。mysql5.6以後,可以通過innodb_analyze_is_persistent選項來持久化儲存統計資訊到磁碟上。

可以關閉innodb_stats_on_metadata選項來避免耗時的表統計資訊的重新整理。

高效能的MySQL(8)優化伺服器配置一併發和負載

當mysql遇到高併發時,可能會遇到不曾遇到的瓶頸。一 innodb併發配置 innodb是為高效能設計的,在最近幾年他的提公升非常明顯,但依然不完美。innodb有自己的 執行緒排程器 控制線程怎麼進入核心訪問資料,以及他們在核心中一次可以做哪些事情。最基本的限制併發的方式是使用innodb th...

優化伺服器設定 高效能MySQL

mysql有大量可以修改的引數 但不應該隨便去修改。通常只需要把基本的項配置正確 大部分情況下只有很少一些引數是真正重要的 應該將更多的時間花在schema的優化 索引,以及查詢設計上。在正確地配置了mysql的基本配置項之後,再花力氣去修改其它配置項的收益通常就比較小了。1.建立mysql配置檔案...

高效能Mysql 伺服器效能剖析

1 如何確認伺服器是否達到了最佳效能狀態 2 找出某條sql語句為什麼不夠快 3 間歇性疑難故障 解決方案就是測量伺服器的時間花費在 使用的技術則是效能剖析 profiling 效能的定義是完成某個任務所花費的時間,資料庫的目的是執行sql語句。什麼是優化?降低cpu利用率?不是,資源是用來消耗並用...