• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    InnoDB隔離模式對MySQL性能的影響_MySQL

    來源:懂視網 責編:小采 時間:2020-11-09 20:10:35
    文檔

    InnoDB隔離模式對MySQL性能的影響_MySQL

    InnoDB隔離模式對MySQL性能的影響_MySQL:過去的幾個月我寫了兩篇文章,一篇是InnoDB 事務歷史相關的危險債務,另一篇是關于MVCC 可能導致MySQL嚴重的性能問題的真相。在這篇文章里我將討論一個相關的主題 – InnoDB 事務隔離模式,還有它們與MVCC(多版本并發控制)的關系,以及它們是如何影響
    推薦度:
    導讀InnoDB隔離模式對MySQL性能的影響_MySQL:過去的幾個月我寫了兩篇文章,一篇是InnoDB 事務歷史相關的危險債務,另一篇是關于MVCC 可能導致MySQL嚴重的性能問題的真相。在這篇文章里我將討論一個相關的主題 – InnoDB 事務隔離模式,還有它們與MVCC(多版本并發控制)的關系,以及它們是如何影響
    過去的幾個月我寫了兩篇文章,一篇是InnoDB 事務歷史相關的危險債務,另一篇是關于MVCC 可能導致MySQL嚴重的性能問題的真相。在這篇文章里我將討論一個相關的主題 – InnoDB 事務隔離模式,還有它們與MVCC(多版本并發控制)的關系,以及它們是如何影響MySQL性能的。

    MySQL手冊提供了一個關于MySQL支持的事務隔離模式的恰當描述 – 在這里我并不會再重復,而是聚焦到對性能的影響上。

    SERIALIZABLE – 這是最強的隔離模式,本質上打敗了在鎖管理(設置鎖是很昂貴的)的條件下,多版本控制對所有選擇進行鎖定造成大量的開銷,還有你得到的并發。這個模式僅在MySQL應用中非常特殊的情況下使用。

    REPEATABLE READ – 這是默認的隔離級別,通常它是相當不錯的,對應用程序的便捷性來說也不錯。它在第一次的時候讀入所有數據 (假設使用標準的非鎖讀)。但是這有很高的代價 – InnoDB需要去維護事務記錄,從一開始就要記錄,它的代價是非常昂貴的。更為嚴重的情況是,程序頻繁地更新和hot rows – 你真的就不想InnoDB去處理rows了,它有成百上千個版本。

    在性能上的影響, 讀和寫都能夠被影響。用select查詢遍歷多個行是代價高昂的,對于更新(update)也是,在MySQL 5.6中,尤其是版本控制看起來導致了嚴重的爭用問題。

    下面是例子:完全在內存中的數據集中運行 sysbench,并啟動 transaction 、運行全表、掃描、查詢幾次,同時保持 transaction 是開著的:

    sysbench --num-threads=64 --report-interval=10 --max-time=0 --max-requests=0 --rand-type=pareto --oltp-table-size=80000000 --mysql-user=root --mysql-password= --mysql-db=sbinnodb --test=/usr/share/doc/sysbench/tests/db/update_index.lua run

    正如你可以看到的,寫(write )操作的吞吐量大幅下降,并且持續走低,這時transaction 是開著的,不僅是在查詢(query)操作運行的時候。在可復讀的隔離模式下,當你已經選擇了之外的transaction ,緊接著就是一個long transaction ,這也許是我能找到的最糟糕情況了。當然了你也會在其他情況下看到回歸算法(regression )。

    如果有人想測試,可以重復下面我用的查詢集合:

    READ UNCOMMITTED – 我覺得這是最難理解的隔離模式(悲催的只有2條文檔),只描述了它的邏輯觀點。如果你使用了這種隔離模式,你會看到數據控中所有發生的變化,即使是那些還沒被提交的transactions 。這種隔離模式一種好的用例是:你能“watch”到大規模的有臟讀(dirty reads)的UPDATE 語句,顯示了哪行被改變了,哪些沒有改變。

    如果transaction 事務在運行的時候出錯了,那么這個聲明會顯示還沒被提交的和可能沒被提交的變化,所以使用這個模式要小心為妙。有一些用例雖然不需要我們100%準確的數據,在這種情況下,這種模式就變得非常方便。

    1. select avg(length(c)) from sbtest1;
    2. begin;
    3. select avg(length(c)) from sbtest1;
    4. select sleep(300);
    5. commit;

    不只是可復讀(Repeatable Read)的默認隔離級別,同樣也可以用于InnoDB 邏輯備份 – mydumper 或者 mysqldump –single-transaction

    這些結果顯示這個備份的方法恢復的時間太長而不能用于大型數據集合,同樣這個方法受到性能影響,也不能用于頻繁寫入(write )的環境中。

    READ COMMITTED 模式和REPEATABLE READ模式很相似,本質區別在于哪個版本都不在transaction中從頭開始讀取,取而代之的從當前語句開始讀取。因此使用這種模式允許InnoDB少維護很多版本,特別是你沒有很長的statements要允運行。如果你有很長的select要運行,如報表查詢對性能的影響仍然很嚴重。

    通常我認為好的做法是把READ COMITTED隔離模式做為默認,對于應用程序或者transactions 有必要就改成REPEATABLE READ。

    那么,從性能角度來看,如何體現READ UNCOMMITTED?理論上,InnoDB 可以清除行版本,在READ UNCOMMITTED模式下即便是該語句已經開始執行之后,也可以創建。在實踐中,由于一個bug或者一些復雜實現的細節做不到,語句開始仍然是行版本。所以,如果你在READ UNCOMMITTED聲明中運行很長的SELECT,你會得到大量的行版本創建信息,就像你用了READ COMMITTED。No win here。

    從SELECT方面還有一個重要的win - READ UNCOMMITTED隔離模式意味著InnoDB 不需要去檢查舊的行版本 - 最后一行總是對的,這會使得性能有明顯的改善,尤其是當undo空間已經在磁盤上溢出,查找舊的行版本會造成大量的IO讀寫。

    也許上面這個select avg(k) from sbtest1;是我能找到的最好的查詢例子了,能與之類似的更新工作量。假使READ UNCOMMITTED隔離模式在一分鐘左右完成,我認為在READ COMMITTED隔離模式下沒有完成過,因為新索引條目插入的速度要比掃描速度快。

    最后思考:正確的使用InnoDB 隔離模式,能夠讓您的應用程序得到最佳性能。你得到的好處可能不同,在某些情況下,也可能沒什么區別。關系到InnoDB 的歷史版本,似乎好有好多工作要做,我希望在未來的MySQL中能解決。

    英文原文:MySQL performance implications of InnoDB isolation modes

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    InnoDB隔離模式對MySQL性能的影響_MySQL

    InnoDB隔離模式對MySQL性能的影響_MySQL:過去的幾個月我寫了兩篇文章,一篇是InnoDB 事務歷史相關的危險債務,另一篇是關于MVCC 可能導致MySQL嚴重的性能問題的真相。在這篇文章里我將討論一個相關的主題 – InnoDB 事務隔離模式,還有它們與MVCC(多版本并發控制)的關系,以及它們是如何影響
    推薦度:
    標簽: 模式 影響 數據庫
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 日本精品一区二区三区在线视频| 四虎国产精品永久在线观看| 亚洲av无码成人精品国产| 国产69精品久久久久777| 中国精品18videosex性中国| 国产精品午夜免费观看网站| 国产精品亚洲欧美一区麻豆| 精品一区二区三区东京热| 人妻无码精品久久亚瑟影视| 北条麻妃国产九九九精品视频| 国产99视频精品免费专区| 色欲国产麻豆一精品一AV一免费 | 国产精品丝袜一区二区三区| 无码国产亚洲日韩国精品视频一区二区三区| 亚洲综合一区二区国产精品| 国产精品1区2区| 国产精品99精品无码视亚| 精品午夜福利在线观看 | 久久久WWW免费人成精品| 99久久精品国产综合一区| 日本精品不卡视频| 日本一区二区三区精品中文字幕 | 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国 | 最新国产精品拍自在线观看| 午夜亚洲av永久无码精品| 久久精品国产第一区二区| 国产综合成人色产三级高清在线精品发布 | 国产成人亚洲精品91专区手机| 国产精品自拍一区| 99精品人妻无码专区在线视频区| 日本内射精品一区二区视频| 午夜不卡久久精品无码免费| 亚洲精品无码久久久久去q| 中文字幕久久精品无码| 亚洲精品无码久久千人斩| 亚洲AV无码精品色午夜果冻不卡| 亚洲精品乱码久久久久久| 日韩精品专区AV无码| 精品久久久久久亚洲精品| 99久久精品午夜一区二区| 国产精品国产三级国产专播|