2012-01-16 94 views
3

我在InnoDB表上運行我的網站,目前爲止工作非常順利。現在我想知道我的網站上實時發生了什麼,因此我將每個網頁瀏覽(頁面,引用鏈接,IP,主機名等)存儲在InnoDB表中。每秒大約有100個插入,並且這張表只在我瀏覽日誌時偶爾讀一次。Mysql內存表與InnoDB表(很多插入,很少讀取)

我每隔一分鐘就用一個刪除舊項目的cron清理表格。這個表中平均剩下約35.000行,大小約爲5MB。

如果我要將InnoDB表傳輸到MEMORY表,它會在服務器上更容易嗎?據我所見,這會節省很多磁盤IO的權利?重新啓動Mysql會導致數據丟失,但這對我而言並不重要。

問題:就我而言,你會推薦一個InnoDB表上的Memory表嗎?

回答

2

是的,我願意。你提到的條件(很多寫操作,定期清除數據,不需要數據持久化)使它成爲MEMORY的理想候選者。

+0

我切換到一個MEMORY表,表現還是不錯的。我確實注意到我的鎖等待比現在有點不好。 Tuning-primer說,當前鎖定等待比率= 1:570。我能做些什麼呢? – 2012-01-16 16:41:57

+0

我相信L/W比率是一個服務器範圍的指標,所以你應該在另一個問題中提出。也可能在http://serverfault.com/而不是SO上。 – Mchl 2012-01-16 16:46:16

+0

好的,謝謝,我在這裏問過它:http://serverfault.com/questions/350364/high-lock-wait-ratio-in-mysql – 2012-01-16 17:45:12

0

請優化您的InnoDB設置:

只要你配置的InnoDB使用足夠的內存來容納整個表(與innodb_buffer_pool_size),並沒有從同一個服務器上的其他InnoDB表壓力過大,數據將保留在內存中。如果您擔心寫入性能(並且再次禁止使用同一系統),則可以通過設置innodb_flush_log_at_trx_commit = 0並禁用二進制日誌記錄來降低持久性,從而大幅度提高寫入性能。

對臨時表使用任何類型的觸發器都會很麻煩,並且不會給臨時表上的事務性帶來任何好處。

你可以在這裏找到更多的細節: http://dev.mysql.com/doc/refman/4.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit