如何在不影響生產性能的情況下將索引添加到18 GB innodb mysql表中?該表經常被訪問,我試着改變表格,並且已經鎖定了200多個查詢,這對性能不利。還有其他方法可以做到嗎?如何在不影響生產性能的情況下將索引添加到18 GB的innodb mysql表中?
回答
TheOnly92 - 還有另外一個選擇,一個即使是亞馬遜和eBay使用。在網站無法訪問的情況下,維護時間過長並不構成「糟糕」的形式。在這些場合中,您將看到一個404維護頁面以用戶友好的界面顯示,表示該站點正在進行基本的升級......等等。
這可能是創建此應用程序時最實用的解決方案頁面會帶你5分鐘,而另一個選項可能需要很多小時才能找出並實現更多。另外,由於這種情況很少發生,所以用戶不太可能被這樣的信息或停機時間推遲。
吉姆
您有更具體的方法嗎?我想我明白你的意思,但我有點混淆。由於我有很多代碼編輯/插入記錄到數據庫的部分,我不認爲我可以停止所有的1小時,因爲它是整個網站的主要部分... – TheOnly92 2010-07-18 09:09:28
+1計劃停機時間是一個完全可以接受的解決方案用於維護目的,並且即使在這個24x7x365的世界中也應該保持這樣。只要預先給出了停機時間的適當警告,並提供了再次提供的估計時間,那麼系統的大多數用戶都會接受它。正如吉姆指出的那樣,互聯網上的大多數大型網站(ebay,amazon,twitter等)都是這樣做的。 – 2010-07-18 10:08:22
只要你有相當準確的估計工作需要多長時間(你應該能夠在測試系統上運行你的任務來得到估計,並測試你想要做什麼) ,只要你計劃你打算做的一切事情,如果任何步驟失敗了,就有可能發生回滾。 – 2010-07-18 10:12:59
這取決於你不失去新紀錄有多重要?
重複使用CREATE TABLE ... LIKE ...
表結構,增加新的索引到重複表,做一個INSERT INTO ... SELECT ... FROM ...
抓住所有數據,然後運行一對ALTER
s到重命名舊錶,然後將新表重命名爲舊錶名。
不幸的是,如果舊錶中的任何數據在INSERT/SELECT運行時間和表被重命名之間發生變化,那麼它可能會丟失。使用one of the Maatkit tools進行表格比較可能會得到數據。
另一種常見模式依賴於重複的硬件。設置複製從站,在那裏添加索引,然後使從站成爲主站。
這些都不會很快,但它們可能會比直接添加索引更快。但是,如果您可以承受停機時間,那麼在更改/複製/切換從屬設備時,您應該只是將系統關閉。不必擔心重新獲得數據同步將使您的生活更輕鬆。
(你不妨考慮切換到一個數據庫,lets you add indexes without locking the table)
那麼,我們不會丟失數據是非常關鍵的...... – TheOnly92 2010-07-18 07:15:04
另一種選擇是使用pt-online-schema-change。它將使用新索引創建舊錶的副本並創建觸發器,以反映從舊錶到新表的所有更改。最後,它將更改舊錶的名稱。
- 1. SQL Server如何在不影響性能的情況下將鏈接的服務器添加到同一實例
- 2. 如何在不影響背景圖像的情況下將填充添加到?
- 3. 將* .sdf文件添加到.gitignore中可能產生的影響
- 4. 如何在不影響向下滾動性能的情況下將本地圖像加載到UITableView中?
- 5. 在不影響可用性的情況下向圖像添加任意數據
- 6. 向MySQL表添加大列(VARCAHR)是否會對性能產生重大影響?
- 7. 如何在沒有性能影響的情況下統計MySQL中的頁面瀏覽量
- 8. Solr中的存檔策略在不影響性能的情況下減少索引文件大小
- 9. 如何在不影響生產環境的情況下比較oracle中兩個大表之間的數據
- 10. 在不添加引用的情況下將支持庫添加到NuGet包中
- 11. 在不影響現有數據的情況下將CSV數據的特定列添加到Heroku表中
- 12. 在不鎖定表的情況下導入MySQL InnoDB轉儲
- 13. 在熊貓中,如何在不添加新列的情況下重置索引?
- 14. mysql/innodb數據庫大小如何影響性能?
- 15. 如何在不影響邊緣的情況下將樣式應用到Chrome
- 16. 如何在不影響內錨的情況下讓li點擊?
- 17. 如何在不影響webview中的baseURL的情況下加載JavaScript?
- 18. 將索引添加到生成的列
- 19. 緩存一致性如何影響性能在這種情況下
- 20. 如何在不影響頁面中其他功能的情況下向我的HTML頁面添加鏈接?
- 21. 如何在不影響其彈出菜單的情況下將邊框添加到微調器
- 22. 如何在不重寫的情況下向類添加屬性?
- 23. 如何將新索引'SAFELY'添加到生產數據庫的表中?
- 24. 在不影響透明的情況下疊加圖像
- 25. Mysql InnoDB性能優化和索引
- 26. 如何在不影響每一行的情況下進行foreach?
- 27. 如何在不影響行間距的情況下截斷UILabel?
- 28. 在不使用的情況下導入名稱空間,影響性能?
- 29. 如何在不影響安全性的情況下使用Server.htmlEncode/Server.htmlDecode?
- 30. 如何讓用戶在不影響安全性的情況下更改connectionString?
請參閱http://stackoverflow.com/questions/1601735/whats-the-easiest-way-to-add-an-index-on-a-live-myisam-table – 2010-07-18 07:08:46
我可以就此做同樣的事嗎?數據庫?將原始數據庫複製到新數據庫,更改新數據庫,同步數據庫之間的內容,刪除原始數據庫,然後重命名新數據庫? – TheOnly92 2010-07-18 07:21:59