我已經描述了MySQL更新查詢的性能。在穩定狀態之後,吞吐量圖中觀察到突然下降。我已經多次重做了這些測試。我發現,對於同一場景,突然下降的地點並不相同。它隨時間變化。我想知道這是因爲在緩衝池中緩存而發生的嗎?我使用MsSQL進行了相同的測試,我找不到這個問題。請幫助我解決這個問題。在MySQL更新查詢中觀察到突然下降
0
A
回答
0
性能(對於大表)是關於磁盤命中的。和技巧來緩解這種情況。
需要更多的細節 - 如SHOW CREATE TABLE
,SHOW TABLE STATUS
和UPDATE
。性能下降有多嚴重? buffer_pool有多大?它的內存是多少?但這裏有一些一般的答案。
「更改緩衝區」是一種緩存寫入索引的技術。 INSERTs
和DELETEs
需要最終更新所有非唯一索引。另外,如果索引列更改,UPDATEs
也需要這樣做。這些更改會收集在buffer_pool中的「更改緩衝區」中。默認情況下,buffer_pool的25%專用於此類。
在一些數量的修改,改變緩衝區滿。此時,需要讀 - 修改 - 寫週期來更新包含索引的BTrees。這個可能是可見的吞吐量下降。
同時,那需要的是尚未更新索引的查詢?不是問題。 CB根據需要進行檢查。 (額外的CPU週期,以避免I/O - 通常是一個勝利。)
UUIDs是可怕的表現 - 有時會有「跌倒懸崖」syndrone。原因在於它們是多麼隨機的,因此一旦表(或uuid索引)大於完全適合buffer_pool的程度,緩存是多麼的無用。 UUID列通常被聲明爲UNIQUE
(或PRIMARY
),因此需要立即在INSERT
上進行檢查。也就是說,在Change Buffer中不能延遲。
如果您正在構建與UUID的表,很長一段時間,它都可以在BUFFER_POOL緩存和吞吐量是好的。但是最終表/索引變得太大,必要的I/O進入。當表的大小是緩存的20倍時,只有1/20的動作可以在緩存中找到。
什麼MSSQL?不同的供應商使用不同的技術來解決主要的性能殺手:磁盤。我不知道甲骨文等是做什麼的;但可能會有所不同,並且由於UUID或緩存已滿,可能會遇到磚牆的其他變體。 (您可能會看到其他解釋)
相關問題
- 1. 下降觀察
- 2. MySQL突然性能下降
- 3. Mysql更新性能突然降臨
- 4. 使用MySQL觀察到奇怪的事情......查詢突然變得超快
- 5. Stata下降觀察命令
- 6. SAS下降克隆觀察
- 7. MySQL查詢突然減速
- 8. 在MYSQL中更新查詢?
- 9. ios,healthkit觀察員查詢
- 10. 更新查詢MySQL到VB.net
- 11. 通過重新查詢或添加到集合來更新可觀察集合?
- 12. Java:內存使用問題(突然觀察到的峯值)
- 13. Java觀察者/ Observable更新
- 14. 更新淘汰賽觀察
- 15. 點擊更新可觀察
- 16. 觀察員缺少更新?
- 17. MySQL查詢突然不再起作用
- 18. CCProgressTimer不更新,然後突然跳到
- 19. MySQL的性能下降聯接查詢
- 20. 觀察SQL正在運行的查詢
- 21. Azure隊列性能突然下降
- 22. 哈希表性能突然下降
- 23. Wpf動畫性能突然下降
- 24. Instagram的api V1突然全部下降
- 25. 當可觀察數組更新時,查看模型不更新
- 26. 「和」在MySQL更新查詢
- 27. 更新查詢在MySQL
- 28. SQL更新查詢在MySQL
- 29. MySQL更新查詢
- 30. MySQL查詢更新