<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-86  評論-33  文章-0  trackbacks-0
     

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

    為什么要學習Innodb的調優:
      目前來說:InnoDB是為Mysql處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基于磁盤的關系數據庫引擎所不能匹敵的。在數據量大的網站或是應用中Innodb是倍受青睞的。
      另一方面,在數據庫的復制操作中Innodb也是能保證masterslave數據一致有一定的作用。

    參數調優內容:
      1. 內存利用方面
      2. 日值控制方面
      3. 文件IO分配,空間占用方面
      4. 其它相關參數

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

    去確認使用情況。


    第二個:
    innodb_additional_mem_pool

    作用:用來存放Innodb的內部目錄
    這個值不用分配太大,系統可以自動調。不用設置太高。通常比較大數據設置16M夠用了,如果表比較多,可以適當的增大。如果這個值自動增加,會在error log有中顯示的。
    分配原則:
    show innodb status"G;去查看運行中的DB是什么狀態(參考BUFFER POOL AND MEMORY段中),然后可以調整到適當的值。
    ----------------------
    BUFFER POOL AND MEMORY
    ----------------------
    Total memory allocated 4668764894; in additional pool allocated 16777216
    參考:in additional pool allocated 16777216
    根據你的參數情況,可以適當的調整。

    設置方法:
    innodb_additional_mem_pool=16M


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


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


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

    innodb_log_buffer_size=3M

    innodb_flush_logs_at_trx_commit
    作用:控制事務的提交方式
    分配原則:這個參數只有3個值,0,1,2請確認一下自已能接受的級別。默認為1,主庫請不要更改了。

    性能更高的可以設置為0或是2,但會丟失一秒鐘的事務。
    說明:

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

    從以上分析,當這個值不為1時,可以取得較好的性能,但遇到異常會有損失,所以需要根據自已的情況去衡量。


    設置方法:
    innodb_flush_logs_at_trx_commit=1

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

    設置方法:

    innodb_file_per_table=1

    innodb_file_io_threads
    作用:文件讀寫IO數,這個參數只在Windows上起作用。在LINUX上只會等于4
    設置方法:

    innodb_file_io_threads=4

    innodb_open_files
    作用:限制Innodb能打開的表的數據。
    分配原則:如果庫里的表特別多的情況,請增加這個。這個值默認是300。

    設置方法:

    innodb_open_files=800
    請適當的增加table_cache


    4. 其它相關參數

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

    innodb_flush_method=O_DIRECT

    innodb_max_dirty_pages_pct
    作用:控制Innodb的臟頁在緩沖中在那個百分比之下,值在范圍1-100,默認為90.
    這個參數的另一個用處:當Innodb的內存分配過大,致使Swap占用嚴重時,可以適當的減小調整這個值,使達到Swap空間釋放出來。建義:這個值最大在90%,最小在15%。太大,緩存中每次更新需要致換數據頁太多,太小,放的數據頁太小,更新操作太慢。
    設置方法:

    innodb_max_dirty_pages_pct
    =90
    動態更改需要有Super權限:
    set global innodb_max_dirty_pages_pct=50;

    posted on 2010-04-08 14:15 Derek.Guo 閱讀(867) 評論(0)  編輯  收藏 所屬分類: Database
    MSN:envoydada@hotmail.com QQ:34935442
    主站蜘蛛池模板: 18禁黄网站禁片免费观看不卡| 免费观看午夜在线欧差毛片| 亚洲国模精品一区| 亚洲视频一区二区三区四区| 香蕉免费看一区二区三区| 成年性羞羞视频免费观看无限| 久久亚洲AV午夜福利精品一区| 国产亚洲精品美女久久久久 | 两个人的视频www免费| 女人18毛片水真多免费播放| 亚洲国产人成网站在线电影动漫| 免费在线观看自拍性爱视频| 国产成人免费高清激情视频| 久久亚洲国产成人精品性色| 好湿好大好紧好爽免费视频| 四虎影视精品永久免费| 伊人久久五月丁香综合中文亚洲| 亚洲免费视频在线观看| 亚洲综合AV在线在线播放| 美女啪啪网站又黄又免费| 毛片免费视频观看| 亚洲成aⅴ人片在线影院八| 久久精品私人影院免费看| 亚洲中文字幕在线乱码| 未满十八私人高清免费影院| 日韩一区二区在线免费观看| 中文字幕在线观看亚洲视频| 亚洲精品在线免费观看视频| 久久亚洲AV午夜福利精品一区 | 成人免费视频观看无遮挡| 亚洲欧洲日产v特级毛片| 久久国产精品免费网站| 国产aⅴ无码专区亚洲av| 成人网站免费大全日韩国产 | 亚洲日本一区二区三区在线| 深夜A级毛片视频免费| 青青草国产免费久久久下载| 亚洲不卡影院午夜在线观看| 91在线视频免费播放| 亚洲一区二区三区免费在线观看 | 福利片免费一区二区三区|