mysql innodb 設置 raw,完成linux下繞過內核緩沖區,完成直接I/O
發表時間:2023-08-24 來源:明輝站整理相關軟件相關文章人氣:
[摘要](轉自linux社區)
MySQL 的 InnoDB 存儲引擎不僅可以緩存索引,而且還可以緩存數據,如果將其表和索引存儲在裸設備(Raw Device)上,從而繞過了文件系統的高速緩存和緩沖器而直接訪問磁盤,那么將大大降低Linux文件系統的負擔,使系統性能獲得顯著改善。
另外,從裸設備在數據庫應...
(轉自linux社區)
MySQL 的 InnoDB 存儲引擎不僅可以緩存索引,而且還可以緩存數據,如果將其表和索引存儲在裸設備(Raw Device)上,從而繞過了文件系統的高速緩存和緩沖器而直接訪問磁盤,那么將大大降低Linux文件系統的負擔,使系統性能獲得顯著改善。
另外,從裸設備在數據庫應用的優化原理中,我們也可以看到優化數據庫的一個基本方向,就是如何設法降低因數據庫特有的 I/O 密集型訪問所導致的文件系統的繁重負擔。因此,即使在現有的基于文件系統的數據庫存儲引擎上,也可考慮使用特殊的文件系統掛載方式。
例如為存儲數據庫文件的分區使用 noatime 作為掛載參數,由于訪問次數(access times)不再被記錄 可以帶來系統性能的一定程度的提升。
──────────────────────────────────────────────────────────────────────────────
本筆記最新配置之系統環境:
──────────────────────────────────────────────────────────────────────────────
OS:??CentOS6
HDD:? /dev/sdc /dev/sdd
RAW:? /dev/raw/raw1 /dev/raw/raw2
MySQL:? 5.1.61
USER:? mysql:mysql
參考官方網站的配置指引:
──────────────────────────────────────────────────────────────────────────────
(1) 設置裸設備(Prepare the raw device)
──────────────────────────────────────────────────────────────────────────────
在使用裸設備之前,必須先將磁盤設備綁定到裸設備上:
# /bin/raw /dev/raw/raw1 /dev/sdc;
--------------------------------------------------------------------------------
/dev/raw/raw1:? bound to major 8, minor 32
--------------------------------------------------------------------------------
再綁定另一個裸設備,然后還要讓您的MySQL數據庫的運行用戶有權讀寫裸設備:
# /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數據表
──────────────────────────────────────────────────────────────────────────────
如果您的數據庫已經運行,并且現有數據存儲于舊的InnoDB引擎之中,如果您需要遷移的話,
請在關閉數據庫之前預先用mysqldump命令導出您的數據, 等新引擎配置好之后再導入即可。
可參考如下SQL命令查看和導出您的InnoDB數據表:
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導出數據,請參考如下格式(請用相應的數據庫和表名稱):
mysqldump -u root -p -h localhost [database].[table] > database.table.sql
注意:您必須逐個表導出舊的數據。
──────────────────────────────────────────────────────────────────────────────
(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 還提供了另一種實現方式,配置 my.ini 里 innodb_flush_method
innodb_flush_method = O_DIRECT
這樣也可以實現直接I/O
?
以上就是mysql innodb 配置 raw,實現linux下繞過內核緩沖區,實現直接I/O的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。