2012-06-20 51 views
0

我每天都有一個MySQL/Slave安裝程序,我們在從機上執行查詢以進行審計。該DB上的表有超過5000萬行。如果我在從服務器上執行這些查詢,則從服務器在主服務器後面運行。此時如果插入查詢在主數據庫中執行。這個插入查詢在從DB上執行多次。示例場景:每次用戶登錄時,我們都會插入他們的審覈細節。看看下面的數據,它會在桌面上多次插入。沒有辦法讓用戶在同一秒內多次登錄。爲什麼會發生,我該如何解決這個問題?從服務器在主服務器後面運行時插入重複條目?

| Kannan | 2012-04-28 12:27:57   | 
| Kannan | 2012-04-28 12:27:57   | 
| Kannan | 2012-04-28 12:27:57   | 
| Kannan | 2012-04-28 12:27:57   | 
| Kannan | 2012-04-28 12:27:57 
+0

你在從機上執行寫查詢嗎? –

+0

不,但我們正在執行**插入選擇**查詢僅限主人。 – kannanrbk

+0

我只是看不到如何在從機上運行查詢會導致從機在主機後面;複製線程不應該受到這些查詢的影響,除了可能在您鎖定從站上的表時(這種情況下更新將需要更長的時間才能生效) –

回答

0

如果你需要實時數據,你真的需要來自主選擇。在主/從環境中插入/選擇通常不是一個好主意。如果您使用基於語句的複製,則SELECT還需要在從屬設備上運行。如果SELECT需要10秒鐘運行,你的奴隸將會落後10秒。

插入通常非常非常快。由於需要準備時間,SELECT會顯着降低INSERT的速度。大多數情況下,MySQL一次複製1條語句。在此聲明完成之前,複製到奴隸將落後。雖然違反直覺,但通常選擇數據,創建INSERT語句(即在應用程序層),然後運行INSERT會更好。