Tidb數據庫報錯:Transaction too large


Tidb是一個支持ACID的分布式數據庫,當你導入一個非常大的數據集時,這時候產生的事務相當嚴重,並且Tidb本身對事物的大小也是有一個嚴格的控制。

有事務大小的限制主要在於 TiKV 的實現用了一致性協議。對於任何一個分布式數據庫,如果你要用一致性協議去做這種復制,肯定要避免非常大的事務。所以這個問題不是 TiDB 的問題。

那大概就會報這樣的錯誤:

9500:Transaction too large

意思就是說由於分布式事務要做兩階段提交,並且底層還需要做 Raft 復制,如果一個事務非常大,會使得提交過程非常慢,並且會卡住下面的 Raft 復制流程。為了避免系統出現被卡住的情況,我們對事務的大小做了限制,這是tidb官方解釋。

  • 單條 KV entry 不超過 6MB
  • KV entry 的總條數不超過 30w
  • KV entry 的總大小不超過 100MB

解決方法就是:

set @@tidb_batch_insert =ON
set @@tidb_batch_delete = ON

把這兩項打開就行了。

事實上,最好的解決方法就是使用limit來進行導入數據,你可以選擇編寫一個循環來執行。

 給大家看看tidb官方的說明方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM