乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MySQL優(yōu)化(十一) MySQL 卓越資源...

       昵稱90415 2009-02-25

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

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

      7.6 磁盤

       

       

      • 磁盤搜索是性能的很大瓶頸。這個問題在數(shù)據(jù)大量增長以至于無法使用有效的緩存時尤為明顯?;蚨嗷蛏匐S即訪問大數(shù)據(jù)庫時,就必然會有至少一次磁盤搜索來讀數(shù)據(jù),兩次磁盤搜索來寫數(shù)據(jù)。最小化這個問題的辦法就是降低磁盤搜索次數(shù)。

         

         

      • 增加有效磁盤馬達(dá)數(shù)量(這能減少搜索時的開銷)或者將不同的文件鏈接到不同的磁盤上又或者分盤:

         

         

        使用符號鏈接

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

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

         

        hdparm -m 16 -d 1

        注意,當(dāng)使用這個命令之后性能和可靠性會依賴硬件,因此我們強(qiáng)烈建議在使用 hdparm 后一定要做測試。請查閱 hdparm 的手冊。如果沒有正確使用 hdparm,則可能導(dǎo)致文件系統(tǒng)沖突,所以在試驗之前備份一下。

      • 還可以在數(shù)據(jù)庫使用的文件系統(tǒng)上設(shè)置其參數(shù):如果無需知道文件的最后訪問時間(這對數(shù)據(jù)庫系統(tǒng)沒用),則在掛載文件系統(tǒng)時使用 -o noatime 選項。這就會略過更新文件系統(tǒng)節(jié)點的最后訪問時間,也就減少了磁盤搜索。在很多操作系統(tǒng)上,可以在掛載文件系統(tǒng)是使用 -o async 選項以異步更新它。如果你的機(jī)器相當(dāng)?shù)姆€(wěn)定,這會帶來性能提升但可靠性并沒犧牲多少(默認(rèn)只能在Linux上這樣用)。

       

       

      7.6.1 使用符號鏈接

       

       

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

       

      7.6.1.1 在 Unix 上符號鏈接數(shù)據(jù)庫

       

       

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

       

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

       

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

       

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

       

      現(xiàn)在,在 db1 中的表 tbl_a,也會在 db2 中出現(xiàn)。如果有一個客戶端要更新 db1.tbl_a 而另一個要更新 db1.tbl_a,這時就會出問題了。

       

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

       

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

       

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

       

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

       

      然后把這個語句改成:

       

      if (1)

       

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

       

      7.6.1.2 在 Unix 上符號鏈接數(shù)據(jù)表

       

       

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


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

         

         

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

       

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


      • ALTER TABLE 操作會忽略 DATA DIRECTORYINDEX DIRECTORY 表選項。

         

         

      • BACKUP TABLERESTORE TABLE 也沒考慮符號鏈接。

         

         

      • `.frm` 文件肯定不能被符號鏈接(在前面提到,索引及數(shù)據(jù)文件可以被符號鏈接)。企圖這么做(比如用同義)的話就會導(dǎo)致一些錯誤。假設(shè)有在數(shù)據(jù)庫目錄下有一個數(shù)據(jù)庫 db1,庫里有一個表 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

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

        • 查詢緩存就會被愚弄了(它認(rèn)為 tbl1 沒有被更新,因此返回out-of-data結(jié)果)。
        • tbl2 上執(zhí)行 ALTER 語句也會失敗。

       

       

      7.6.1.3 在 Windows 上符號鏈接數(shù)據(jù)庫

       

       

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

       

      [mysqld]
      skip-symbolic-links

       

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

       

      [mysqld]
      symbolic-links

       

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

       

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

         

         

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

       

       

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

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多