mysql innodb 設(shè)置 raw,完成linux下繞過內(nèi)核緩沖區(qū),完成直接I/O
發(fā)表時間:2023-08-24 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要](轉(zhuǎn)自linux社區(qū))
MySQL 的 InnoDB 存儲引擎不僅可以緩存索引,而且還可以緩存數(shù)據(jù),如果將其表和索引存儲在裸設(shè)備(Raw Device)上,從而繞過了文件系統(tǒng)的高速緩存和緩沖器而直接訪問磁盤,那么將大大降低Linux文件系統(tǒng)的負(fù)擔(dān),使系統(tǒng)性能獲得顯著改善。
另外,從裸設(shè)備在數(shù)據(jù)庫應(yīng)...
(轉(zhuǎn)自linux社區(qū))
MySQL 的 InnoDB 存儲引擎不僅可以緩存索引,而且還可以緩存數(shù)據(jù),如果將其表和索引存儲在裸設(shè)備(Raw Device)上,從而繞過了文件系統(tǒng)的高速緩存和緩沖器而直接訪問磁盤,那么將大大降低Linux文件系統(tǒng)的負(fù)擔(dān),使系統(tǒng)性能獲得顯著改善。
另外,從裸設(shè)備在數(shù)據(jù)庫應(yīng)用的優(yōu)化原理中,我們也可以看到優(yōu)化數(shù)據(jù)庫的一個基本方向,就是如何設(shè)法降低因數(shù)據(jù)庫特有的 I/O 密集型訪問所導(dǎo)致的文件系統(tǒng)的繁重負(fù)擔(dān)。因此,即使在現(xiàn)有的基于文件系統(tǒng)的數(shù)據(jù)庫存儲引擎上,也可考慮使用特殊的文件系統(tǒng)掛載方式。
例如為存儲數(shù)據(jù)庫文件的分區(qū)使用 noatime 作為掛載參數(shù),由于訪問次數(shù)(access times)不再被記錄 可以帶來系統(tǒng)性能的一定程度的提升。
──────────────────────────────────────────────────────────────────────────────
本筆記最新配置之系統(tǒng)環(huán)境:
──────────────────────────────────────────────────────────────────────────────
OS:??CentOS6
HDD:? /dev/sdc /dev/sdd
RAW:? /dev/raw/raw1 /dev/raw/raw2
MySQL:? 5.1.61
USER:? mysql:mysql
參考官方網(wǎng)站的配置指引:
──────────────────────────────────────────────────────────────────────────────
(1) 設(shè)置裸設(shè)備(Prepare the raw device)
──────────────────────────────────────────────────────────────────────────────
在使用裸設(shè)備之前,必須先將磁盤設(shè)備綁定到裸設(shè)備上:
# /bin/raw /dev/raw/raw1 /dev/sdc;
--------------------------------------------------------------------------------
/dev/raw/raw1:? bound to major 8, minor 32
--------------------------------------------------------------------------------
再綁定另一個裸設(shè)備,然后還要讓您的MySQL數(shù)據(jù)庫的運行用戶有權(quán)讀寫裸設(shè)備:
# /bin/raw /dev/raw/raw2 /dev/sdd;
# chown root:mysql /dev/raw/raw1 /dev/raw/raw2;
# chmod 0660 /dev/raw/raw1 /dev/raw/raw2;
# /bin/raw -qa;
# /bin/raw -q /dev/raw/raw1;
# /bin/ls -l /dev/raw/raw1;
# blockdev --report /dev/raw/raw1;
# blockdev --report /dev/sdc;
vi /etc/udev/rules.d/60-raw.rules;
--------------------------------------------------------------------------------
ACTION=="add", KERNEL=="sdc", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdd", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw2 %N"
--------------------------------------------------------------------------------
Note: this make sure device /dev/sdc and /dev/sdd will bind automatically when server reboot.
# vi /etc/udev/rules.d/41-local-permissions-rules;
──────────────────────────────────────────────────────────────────────────────
(2) 如有需要,先備份舊有的InnoDB數(shù)據(jù)表
──────────────────────────────────────────────────────────────────────────────
如果您的數(shù)據(jù)庫已經(jīng)運行,并且現(xiàn)有數(shù)據(jù)存儲于舊的InnoDB引擎之中,如果您需要遷移的話,
請在關(guān)閉數(shù)據(jù)庫之前預(yù)先用mysqldump命令導(dǎo)出您的數(shù)據(jù), 等新引擎配置好之后再導(dǎo)入即可。
可參考如下SQL命令查看和導(dǎo)出您的InnoDB數(shù)據(jù)表:
mysql> SELECT table_schema,table_name,engine FROM INFORMATION_SCHEMA.TABLES;
mysql> SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine='InnoDB';
如有需要,可用mysqldump導(dǎo)出數(shù)據(jù),請參考如下格式(請用相應(yīng)的數(shù)據(jù)庫和表名稱):
mysqldump -u root -p -h localhost [database].[table] > database.table.sql
注意:您必須逐個表導(dǎo)出舊的數(shù)據(jù)。
──────────────────────────────────────────────────────────────────────────────
(3) 初始化階段MySQL的配置
──────────────────────────────────────────────────────────────────────────────
When you create a new data file, put the keyword newraw?
immediately after the data file size in innodb_data_file_path:
# vi /etc/my.cnf;
--------------------------------------------------------------------------------
[mysqld]
innodb_buffer_pool_size=128M
innodb_data_home_dir=
innodb_data_file_path=/dev/raw/raw1:64Mnewraw;/dev/raw/raw2:64Mnewraw
--------------------------------------------------------------------------------
?
后記:
mysql 還提供了另一種實現(xiàn)方式,配置 my.ini 里 innodb_flush_method
innodb_flush_method = O_DIRECT
這樣也可以實現(xiàn)直接I/O
?
以上就是mysql innodb 配置 raw,實現(xiàn)linux下繞過內(nèi)核緩沖區(qū),實現(xiàn)直接I/O的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。