2012-10-17 58 views
0

我有一個應用程序在多個主機的某些表中插入批量記錄。問題是,在一個表中插入多個記錄時,它會鎖定這些表,其他線程必須等待,直到完成。有沒有什麼方法可以讓多個線程在同一個表中提交它的插入,而不用等待用戶。有什麼辦法可以讓我們實現這一點。 換句話說,是否有任何方式在MySQL中允許從多個線程同時批量插入到mysql中,也可以在插入時批量更新表或者允許或不允許來自同一個表上的多個線程的批量更新。在MySQL中併發插入?

有沒有什麼辦法可以在mysql中實現這一點。

謝謝,

Nitesh庫馬爾

+3

使用InnoDB引擎,它在MyISAM中提供了表級的行級鎖定。 –

+0

我正在使用Innodb。 –

回答

1

有用於高速率插入在MySQL與InnoDB的一個good article。我會建議你通過它。

一些參考:

第一的MySQL 5.5 Innodb的插件,我們可以看到的是互斥自旋鎖40%+ CPU浪費(每oprofile的),其下降到約15%在MySQL 5.5.8與8個併發線程。這兩方面都顯示出有很大的收益,並有更多的性能優化空間。 Dmitri在調整MySQL 5.5方面有很好的建議,這是我用來開始的。使用innodb_buffer_pool_instances=8的多個緩衝池非常重要。第二件事 - 分區。不幸的是,MySQL 5.5給寫入工作負載留下了巨大的瓶頸 - 每個索引都有一個rw鎖,因此當時只有一個線程可以插入索引條目,這可能是一個重大瓶頸。我們通過散列partitioning表獲得了2x +更好的性能,並且我預計更多內核的增益可能會更高。通過散列分區(col)分區8是我們使用的。這看起來像一個很好的解決方法,但記住分區可以顯着影響選擇查詢的性能。