隨筆-86  評(píng)論-33  文章-0  trackbacks-0
           

          介紹:
            InnoDBMySQL提供了具有提交,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在SELECT語句提供一個(gè)Oracle風(fēng)格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴(kuò)大鎖定的需要,因?yàn)樵?/span>InnoDB中行級(jí)鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強(qiáng)制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個(gè)查詢中也可以混合。
           Innodb 的創(chuàng)始人:Heikki Tuuri
           Heikki Tuuri在Innodb的Bug社區(qū)里也是很活躍的,如果遇到Bug也可以直接提到社區(qū),得到作者的解答。

          為什么要學(xué)習(xí)Innodb的調(diào)優(yōu):
            目前來說:InnoDB是為Mysql處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。
            另一方面,在數(shù)據(jù)庫的復(fù)制操作中Innodb也是能保證masterslave數(shù)據(jù)一致有一定的作用。

          參數(shù)調(diào)優(yōu)內(nèi)容:
            1. 內(nèi)存利用方面
            2. 日值控制方面
            3. 文件IO分配,空間占用方面
            4. 其它相關(guān)參數(shù)

          .內(nèi)存利用方面:
          首先介紹一個(gè)Innodb最重要的參數(shù):
          innodb_buffer_pool_size
            這個(gè)參數(shù)和MyISAMkey_buffer_size有相似之處,但也是有差別的。這個(gè)參數(shù)主要緩存innodb表的索引,數(shù)據(jù),插入數(shù)據(jù)時(shí)的緩沖。為Innodb加速優(yōu)化首要參數(shù)。
            該參數(shù)分配內(nèi)存的原則:這個(gè)參數(shù)默認(rèn)分配只有8M,可以說是非常小的一個(gè)值。如果是一個(gè)專用DB服務(wù)器,那么他可以占到內(nèi)存的70%-80%。這個(gè)參數(shù)不能動(dòng)態(tài)更改,所以分配需多考慮。分配過大,會(huì)使Swap占用過多,致使Mysql的查詢特慢。如果你的數(shù)據(jù)比較小,那么可分配是你的數(shù)據(jù)大小+10%左右做為這個(gè)參數(shù)的值。例如:數(shù)據(jù)大小為50M,那么給這個(gè)值分配innodb_buffer_pool_size=64M
          設(shè)置方法:
          innodb_buffer_pool_size=4G
          這個(gè)參數(shù)分配值的使用情況可以根據(jù)show innodb status"G;中的
          ----------------------
          BUFFER POOL AND MEMORY
          ----------------------
          Total memory allocated 4668764894;

          去確認(rèn)使用情況。


          第二個(gè):
          innodb_additional_mem_pool

          作用:用來存放Innodb的內(nèi)部目錄
          這個(gè)值不用分配太大,系統(tǒng)可以自動(dòng)調(diào)。不用設(shè)置太高。通常比較大數(shù)據(jù)設(shè)置16M夠用了,如果表比較多,可以適當(dāng)?shù)脑龃蟆H绻@個(gè)值自動(dòng)增加,會(huì)在error log有中顯示的。
          分配原則:
          show innodb status"G;去查看運(yùn)行中的DB是什么狀態(tài)(參考BUFFER POOL AND MEMORY段中),然后可以調(diào)整到適當(dāng)?shù)闹怠?/span>
          ----------------------
          BUFFER POOL AND MEMORY
          ----------------------
          Total memory allocated 4668764894; in additional pool allocated 16777216
          參考:in additional pool allocated 16777216
          根據(jù)你的參數(shù)情況,可以適當(dāng)?shù)恼{(diào)整。

          設(shè)置方法:
          innodb_additional_mem_pool=16M


          .關(guān)于日值方面:
          innodb_log_file_size
          作用:指定日值的大小
          分配原則:幾個(gè)日值成員大小加起來差不多和你的innodb_buffer_pool_size相等。上限為每個(gè)日值上限大小為4G.一般控制在幾個(gè)LOG文件相加大小在2G以內(nèi)為佳。具體情況還需要看你的事務(wù)大小,數(shù)據(jù)大小為依據(jù)。
          說明:這個(gè)值分配的大小和數(shù)據(jù)庫的寫入速度,事務(wù)大小,異常重啟后的恢復(fù)有很大的關(guān)系。
          設(shè)置方法:
          innodb_log_file_size=256M


          innodb_log_files_in_group
          作用:指定你有幾個(gè)日值組。
          分配原則: 一般我們可以用2-3個(gè)日值組。默認(rèn)為兩個(gè)。
          設(shè)置方法:
          innodb_log_files_in_group=3


          innodb_log_buffer_size
          作用:事務(wù)在內(nèi)存中的緩沖。
          分配原則:控制在2-8M.這個(gè)值不用太多的。他里面的內(nèi)存一般一秒鐘寫到磁盤一次。具體寫入方式和你的事務(wù)提交方式有關(guān)。在Oracle等數(shù)據(jù)庫了解這個(gè),一般最大指定為3M比較合適。
          參考:Innodb_os_log_written(show global status 可以拿到)
          如果這個(gè)值增長(zhǎng)過快,可以適當(dāng)?shù)脑黾觟nnodb_log_buffer_size
          另外如果你需要處理大理的TEXT,或是BLOB字段,可以考慮增加這個(gè)參數(shù)的值。
          設(shè)置方法:

          innodb_log_buffer_size=3M

          innodb_flush_logs_at_trx_commit
          作用:控制事務(wù)的提交方式
          分配原則:這個(gè)參數(shù)只有3個(gè)值,0,1,2請(qǐng)確認(rèn)一下自已能接受的級(jí)別。默認(rèn)為1,主庫請(qǐng)不要更改了。

          性能更高的可以設(shè)置為0或是2,但會(huì)丟失一秒鐘的事務(wù)。
          說明:

          這個(gè)參數(shù)的設(shè)置對(duì)Innodb的性能有很大的影響,所以在這里給多說明一下。
          當(dāng)這個(gè)值為
          1時(shí):innodb 的事務(wù)LOG在每次提交后寫入日值文件,并對(duì)日值做刷新到磁盤。這個(gè)可以做到不丟任何一個(gè)事務(wù)。
          當(dāng)這個(gè)值為
          2時(shí):在每個(gè)提交,日志緩沖被寫到文件,但不對(duì)日志文件做到磁盤操作的刷新,在對(duì)日志文件的刷新在值為2
          的情況也每秒發(fā)生一次。但需要注意的是,由于進(jìn)程調(diào)用方面的問題,并不能保證每秒100%的發(fā)生。從而在性能上是最快的。但操作系統(tǒng)崩潰或掉電才會(huì)刪除最后一秒的事務(wù)。
          當(dāng)這個(gè)值為
          0時(shí):日志緩沖每秒一次地被寫到日志文件,并且對(duì)日志文件做到磁盤操作的刷新,但是在一個(gè)事務(wù)提交不做任何操作。mysqld進(jìn)程的崩潰會(huì)刪除崩潰前最后一秒的事務(wù)。

          從以上分析,當(dāng)這個(gè)值不為1時(shí),可以取得較好的性能,但遇到異常會(huì)有損失,所以需要根據(jù)自已的情況去衡量。


          設(shè)置方法:
          innodb_flush_logs_at_trx_commit=1

          3. 文件IO分配,空間占用方面
          innodb_file_per_table
          作用:使每個(gè)Innodb的表,有自已獨(dú)立的表空間。如刪除文件后可以回收那部分空間。
          分配原則:只有使用不使用。但DB還需要有一個(gè)公共的表空間。

          設(shè)置方法:

          innodb_file_per_table=1

          innodb_file_io_threads
          作用:文件讀寫IO數(shù),這個(gè)參數(shù)只在Windows上起作用。在LINUX上只會(huì)等于4
          設(shè)置方法:

          innodb_file_io_threads=4

          innodb_open_files
          作用:限制Innodb能打開的表的數(shù)據(jù)。
          分配原則:如果庫里的表特別多的情況,請(qǐng)?jiān)黾舆@個(gè)。這個(gè)值默認(rèn)是300。

          設(shè)置方法:

          innodb_open_files=800
          請(qǐng)適當(dāng)?shù)脑黾?/span>table_cache


          4. 其它相關(guān)參數(shù)

          這里說明一個(gè)比較重要的參數(shù):
          innodb_flush_method
          作用:Innodb和系統(tǒng)打交道的一個(gè)IO模型
          分配原則:Windows不用設(shè)置。
          Unix可以設(shè)置:fsync() or O_SYNC/O_DSYNC
          如果系統(tǒng)可以禁止系統(tǒng)的Cache那就把他禁了。
          Linux可以選擇:O_DIRECT
          直接寫入磁盤,禁止系統(tǒng)Cache了
          設(shè)置方法:

          innodb_flush_method=O_DIRECT

          innodb_max_dirty_pages_pct
          作用:控制Innodb的臟頁在緩沖中在那個(gè)百分比之下,值在范圍1-100,默認(rèn)為90.
          這個(gè)參數(shù)的另一個(gè)用處:當(dāng)Innodb的內(nèi)存分配過大,致使Swap占用嚴(yán)重時(shí),可以適當(dāng)?shù)臏p小調(diào)整這個(gè)值,使達(dá)到Swap空間釋放出來。建義:這個(gè)值最大在90%,最小在15%。太大,緩存中每次更新需要致?lián)Q數(shù)據(jù)頁太多,太小,放的數(shù)據(jù)頁太小,更新操作太慢。
          設(shè)置方法:

          innodb_max_dirty_pages_pct
          =90
          動(dòng)態(tài)更改需要有Super權(quán)限:
          set global innodb_max_dirty_pages_pct=50;

          posted on 2010-04-08 14:15 Derek.Guo 閱讀(864) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          留言簿(7)

          隨筆分類(83)

          文章分類

          技術(shù)網(wǎng)站

          積分與排名

          • 積分 - 189121
          • 排名 - 306

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          MSN:envoydada@hotmail.com QQ:34935442
          主站蜘蛛池模板: 宜城市| 台北县| 通州市| 铜川市| 宜章县| 郑州市| 西吉县| 湘潭县| 吴忠市| 岳普湖县| 寻乌县| 博罗县| 屏东县| 油尖旺区| 东源县| 廉江市| 上林县| 金乡县| 广德县| 闵行区| 淮北市| 藁城市| 红桥区| 海口市| 崇州市| 长兴县| 探索| 永寿县| 安阳市| 深州市| 福泉市| 鄂托克旗| 遂溪县| 大港区| 樟树市| 嘉义县| 双辽市| 万载县| 孟州市| 郓城县| 望江县|