欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
MySQL優(yōu)化(十一) MySQL 卓越資源

MySQL 優(yōu)化(十一)

2007-06-24 23:13 來(lái)源: imysql.cn 作者:葉金榮 網(wǎng)友評論 0 條 瀏覽次數 82

7.6 磁盤(pán)

 

 

  • 磁盤(pán)搜索是性能的很大瓶頸。這個(gè)問(wèn)題在數據大量增長(cháng)以至于無(wú)法使用有效的緩存時(shí)尤為明顯?;蚨嗷蛏匐S即訪(fǎng)問(wèn)大數據庫時(shí),就必然會(huì )有至少一次磁盤(pán)搜索來(lái)讀數據,兩次磁盤(pán)搜索來(lái)寫(xiě)數據。最小化這個(gè)問(wèn)題的辦法就是降低磁盤(pán)搜索次數。

     

     

  • 增加有效磁盤(pán)馬達數量(這能減少搜索時(shí)的開(kāi)銷(xiāo))或者將不同的文件鏈接到不同的磁盤(pán)上又或者分盤(pán):

     

     

    使用符號鏈接

    意思是,把 MyISAM 表的索引文件和/或數據文件從數據目錄下通常的地方鏈接到其他磁盤(pán)上(這也是分盤(pán))。如果這個(gè)磁盤(pán)沒(méi)有其他用途的話(huà),這對讀寫(xiě)次數都比較好。詳情請看"7.6.1 Using Symbolic Links"。
    分盤(pán)

    如果有好幾個(gè)磁盤(pán),就把第一個(gè)區塊放在第一個(gè)磁盤(pán),把第二個(gè)區塊放在第二個(gè)磁盤(pán),以此類(lèi)推。這意味著(zhù)正常的數據大小比分盤(pán)后的數據小(或者完全一樣),這能獲得更好性能。分盤(pán)完全依賴(lài)于操作系統以及分盤(pán)的大小,因此要用不同的分盤(pán)大小基準測試應用程序。詳情請看"7.1.5 Using Your Own Benchmarks"?;鶞蕼y試的速度的不同完全依賴(lài)于分盤(pán)大小。依賴(lài)分盤(pán)設置參數以及磁盤(pán)數量,會(huì )得到大量不同的測量結果。必須隨機或者順序選擇優(yōu)化方法。
  • 可能會(huì )為了可靠性采用 RAID 0+1,這時(shí),就必須用 2*N 個(gè)驅動(dòng)去來(lái)保存 N 個(gè)驅動(dòng)器上的數據。如果有足夠的內存這可能是最好的方法。不過(guò),這也需要使用卷管理軟件來(lái)有效地管理數據。
  • 另一個(gè)好辦法是RAID的級別根據數據的重要性而定。例如,把能重新生成的有點(diǎn)重要的數據保存在RAID 0磁盤(pán)上,把很重要的數據如主機信息日志等保存在RAID 0+1或者RAID N磁盤(pán)上。RAID N在有很多個(gè)寫(xiě)入時(shí)可能會(huì )有問(wèn)題,因為會(huì )同時(shí)請求更新同一個(gè)字節位。
  • 在Linux上,可以用 hdparm 來(lái)配置磁盤(pán)接口以獲得更好的性能(在負載下高達100%也不是不可能的)。以下 hdparm 配置選項對MySQL就很合適,對其他應用程序可能也不錯:

     

    hdparm -m 16 -d 1

    注意,當使用這個(gè)命令之后性能和可靠性會(huì )依賴(lài)硬件,因此我們強烈建議在使用 hdparm 后一定要做測試。請查閱 hdparm 的手冊。如果沒(méi)有正確使用 hdparm,則可能導致文件系統沖突,所以在試驗之前備份一下。

  • 還可以在數據庫使用的文件系統上設置其參數:如果無(wú)需知道文件的最后訪(fǎng)問(wèn)時(shí)間(這對數據庫系統沒(méi)用),則在掛載文件系統時(shí)使用 -o noatime 選項。這就會(huì )略過(guò)更新文件系統節點(diǎn)的最后訪(fǎng)問(wèn)時(shí)間,也就減少了磁盤(pán)搜索。在很多操作系統上,可以在掛載文件系統是使用 -o async 選項以異步更新它。如果你的機器相當的穩定,這會(huì )帶來(lái)性能提升但可靠性并沒(méi)犧牲多少(默認只能在Linux上這樣用)。

 

 

7.6.1 使用符號鏈接

 

 

可以把數據表或者數據庫移動(dòng)到別的目錄下,然后用符號鏈接到新的位置來(lái)代替。你可能想這么做,例如,想要把表分布到不同的磁盤(pán)上以提高系統速度,就把它們移動(dòng)到有更多剩余空間的磁盤(pán)上。
建議只是把數據庫鏈接到其他磁盤(pán)上,數據表的鏈接是最后的選擇。

 

7.6.1.1 在 Unix 上符號鏈接數據庫

 

 

在Unix上,給數據庫做符號鏈接的方法是先在其他磁盤(pán)上創(chuàng )建一個(gè)目錄,然后再把它鏈接到MySQL數據文件目錄下。

 

shell> mkdir /dr1/databases/testshell> ln -s /dr1/databases/test /path/to/datadir

 

MySQL不支持把一個(gè)目錄鏈接成多個(gè)數據庫。只要沒(méi)有在數據庫間做符號鏈接,那么它就沒(méi)問(wèn)題。假使在MySQL數據文件目錄下已經(jīng)有一個(gè)數據庫 db1 了,然后把 db1 鏈接到 db2

 

shell> cd /path/to/datadirshell> ln -s db1 db2

 

現在,在 db1 中的表 tbl_a,也會(huì )在 db2 中出現。如果有一個(gè)客戶(hù)端要更新 db1.tbl_a 而另一個(gè)要更新 db1.tbl_a,這時(shí)就會(huì )出問(wèn)題了。

 

如果確實(shí)需要這么做,那么就修改一個(gè)源文件。要修改的文件根據MySQL版本不同而不同。MySQL 4.0或更新,在 `mysys/my_symlink.c' 文件中找到以下語(yǔ)句:

 

if (!(MyFlags & MY_RESOLVE_LINK) ||(!lstat(filename,&stat_buff) && S_ISLNK(stat_buff.st_mode)))

 

MySQL 4.0以前,在 `mysys/mf_format.c' 文件中找到如下語(yǔ)句:

 

if (flag & 32 || (!lstat(to,&stat_buff) && S_ISLNK(stat_buff.st_mode)))

 

然后把這個(gè)語(yǔ)句改成:

 

if (1)

 

在Windows上,在編譯MySQL時(shí)使用選項 -DUSE_SYMDIR 就能內置支持目錄符號鏈接。這可以讓你把不同的數據庫放到不同的磁盤(pán)上,詳情請看"7.6.1.3 Using Symbolic Links for Databases on Windows"。

 

7.6.1.2 在 Unix 上符號鏈接數據表

 

 

在MySQL 4.0以前,除非特別小心否則不要鏈接數據表。有一個(gè)問(wèn)題是,當在一個(gè)符號鏈接表上執行 ALTER TABLE, REPAIR TABLE, 或 OPTIMIZE TABLE 時(shí),符號鏈接就會(huì )被刪除然后替換成原來(lái)的文件。這是因為執行這些語(yǔ)句時(shí),需要在數據庫目錄下創(chuàng )建臨時(shí)文件,然后在操作完成后把臨時(shí)文件替換到原來(lái)的文件中去。
最好不要在不能很好支持 realpath() 調用的操作系統上鏈接數據表(不過(guò)至少Linux和Solaris支持 realpath())。執行 SHOW VARIABLES LIKE 'have_symlink' 語(yǔ)句來(lái)檢查你的系統是否支持符號鏈接。
在MySQL 4.0,MyISAM 表完全支持符號鏈接。而其他表類(lèi)型如果也做符號鏈接的話(huà),則很可能在執行語(yǔ)句前會(huì )碰到一些奇怪的問(wèn)題。
MySQL 4.0中的 MyISAM 表符號鏈接以如下方式工作:


  • 在數據目錄下,總是有表定義文件,以及數據文件,以及索引文件。數據和索引文件可以被移動(dòng)到任何處然后用符號鏈接代替,但是表定義文件不可以。
  • 可以分別把數據和索引文件鏈接到不同目錄下。
  • mysqld 沒(méi)有運行時(shí)可以用命令行 ln -s 手工完成符號鏈接。如果用SQL,可以在 CREATE TABLE 時(shí)使用選項 DATA DIRECTORYINDEX DIRECTORY 告訴服務(wù)器使用符號鏈接。詳情請看"14.2.6 CREATE TABLE Syntax"。
  • myisamchk 不會(huì )替換符號鏈接的數據或索引文件。它直接在符號鏈接指向的文件上操作。任何臨時(shí)文件都創(chuàng )建在數據或索引文件所在的目錄下。
  • 當刪除一個(gè)符號鏈接的表后,鏈接表及其指向的表都會(huì )被刪除。這就是為什么不能以 root 身份運行 mysqld 的原因,同樣地,不要允許用戶(hù)有權寫(xiě)MySQL數據庫目錄。
  • 如果用 ALTER TABLE ... RENAME 語(yǔ)句重命名一個(gè)表且沒(méi)有把它移動(dòng)到其他數據庫下,那么在數據庫目錄下的文件就被改名了,相應地,它指向的數據或索引文件也改名了。
  • 如果用 ALTER TABLE ... RENAME 語(yǔ)句把表移動(dòng)到其他數據庫下,則這個(gè)表就移動(dòng)到其他數據庫目錄下。舊的鏈接及其所指向的文件都被刪掉。換言之,新的表就不再被符號鏈接了。

     

     

  • 如果沒(méi)有使用符號鏈接,那么就給 mysqld 增加選項 --skip-symbolic-links
    確保無(wú)人能刪除或重命名數據文件目錄以外的文件。

 

在MySQL 4.0.15以前, SHOW CREATE TABLE 語(yǔ)句不會(huì )報告一個(gè)表是否有符號鏈接。mysqldump 也一樣,它是用 SHOW CREATE TABLE 來(lái)產(chǎn)生 CREATE TABLE 語(yǔ)句的。
表符號鏈接操作還不支持:


  • ALTER TABLE 操作會(huì )忽略 DATA DIRECTORYINDEX DIRECTORY 表選項。

     

     

  • BACKUP TABLERESTORE TABLE 也沒(méi)考慮符號鏈接。

     

     

  • `.frm` 文件肯定不能被符號鏈接(在前面提到,索引及數據文件可以被符號鏈接)。企圖這么做(比如用同義)的話(huà)就會(huì )導致一些錯誤。假設有在數據庫目錄下有一個(gè)數據庫 db1,庫里有一個(gè)表 tbl1,在 db1 目錄下把 tbl2 符號鏈接到 tbl1

     

    shell> cd /path/to/datadir/db1    shell> ln -s tbl1.frm tbl2.frm    shell> ln -s tbl1.MYD tbl2.MYD    shell> ln -s tbl1.MYI tbl2.MYI

    現在如果有一個(gè)線(xiàn)程讀取 db1.tbl1 而另一個(gè)線(xiàn)程更新 db1.tbl2 時(shí)就有問(wèn)題了:

    • 查詢(xún)緩存就會(huì )被愚弄了(它認為 tbl1 沒(méi)有被更新,因此返回out-of-data結果)。
    • tbl2 上執行 ALTER 語(yǔ)句也會(huì )失敗。

 

 

7.6.1.3 在 Windows 上符號鏈接數據庫

 

 

從MySQL 3.23.16開(kāi)始,Windows上支持用 -DUSE_SYMDIR 選項編譯 mysqld-maxmysql-max-nt 服務(wù)器。這就可以通過(guò)符號鏈接把一個(gè)數據庫放在其他磁盤(pán)上。這跟在Unix上做符號鏈接相似,只是設置過(guò)程不大一樣而已。
從MySQL 4.0開(kāi)始,默認支持符號鏈接。如果不需要,用 skip-symbolic-links 選項關(guān)閉它。

 

[mysqld]skip-symbolic-links

 

在MySQL 4.0以前,默認不支持符號鏈接。想要支持它,就要在 `my.cnf'`my.ini' 文件中增加如下內容:

 

[mysqld]symbolic-links

 

在Windows上,在MySQL數據文件目錄下創(chuàng )建一個(gè)包含目標目錄路徑的文件來(lái)做符號鏈接。這個(gè)文件的名字叫 `db_name.sym`,db_name 是數據庫的名字。
假設MySQL數據文件目錄是 `C:\mysql\data',現在想要把數據庫 foo 放在 `D:\data\foo` 目錄下。按以下方法設置:

 

  1. 確認 `D:\data\foo` 目錄存在,如果有必要就創(chuàng )建它。如果在數據文件目錄下已經(jīng)存在一個(gè)數據庫目錄名為 `foo`,那么就把它移動(dòng)到下 `D:\data`。否則,符號鏈接就不生效。移動(dòng)數據庫的時(shí)候最好不要運行服務(wù)器,以避免可能出現的問(wèn)題。

     

     

  2. 創(chuàng )建一個(gè)文件 `C:\mysql\data\foo.sym`,它的內容是路徑 D:\data\foo\。

 

 

之后,數據庫 foo 下的所有表都會(huì )創(chuàng )建到
`D:\data\foo` 下。注意,如果在MySQL數據文件目錄下已經(jīng)存在該數據庫目錄,那么就不會(huì )使用符號鏈接了。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用myisamchk進(jìn)行崩潰恢復-MySQL 3.23 中文參考手冊-網(wǎng)絡(luò )文檔...
MySQL優(yōu)化大全
深入淺出Mysql數據庫開(kāi)發(fā)優(yōu)化與管理維護筆記 22 磁盤(pán)IO的問(wèn)題和數據分布
MYSQL數據庫優(yōu)化(一)
利用拷貝data目錄文件的方式遷移mysql數據庫
修復ecshop數據庫ecs_sessions.MYI報錯
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久