」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在不加表鎖的情況下在大型MySQL生產表上建立索引?

如何在不加表鎖的情況下在大型MySQL生產表上建立索引?

發佈於2024-11-17
瀏覽:632

How to Create an Index on a Large MySQL Production Table Without Table Locking?

如何在不加表鎖的情況下在大型MySQL生產表上建立索引

問題背景:

在大型MySQL 表上建立索引可能是一項艱鉅的任務,尤其是在不間斷存取至關重要的生產環境中。傳統的 CREATE INDEX 語句可能會導致完全表鎖定,從而阻塞所有並發操作。

MySQL 版本注意事項:

  • 在 MySQL 5.6 及更高版本中,索引更新線上執行,允許在索引建立期間繼續讀寫操作。
  • 但是,在 MySQL 5.5 及更早版本中,包括 InnoDB 和 MyISAM表,索引更新將阻止對錶的寫入。

循環主控方法:

對於5.6 之前的MySQL 版本,一種有效的方法是循環主控技術:

  1. 設定從主主控(Master B)複製的輔助主控(Master B) A).
  2. 在Master B上執行架構更新(允許其在升級過程中落後)。
  3. 確保架構變更與從 Master A 上的降版本架構複製指令相容.
  4. 自動將所有客戶端從 Master A 切換到 Master B。
  5. 更新Master A 上的架構並將其設為輔助master.

Percona 的pt-online-schema-change 工具:

此工具透過以下方式自動化循環母版方法:

  • 使用更新後的架構建立新表。
  • 使用觸發器。
  • 從原表中批次複製行。
  • 以新錶取代原表。

AWS RDS 注意事項:

對於託管在Amazon RDS 上的MySQL 資料庫,可以使用「只讀副本升級」功能來促進架構更改,而無需表鎖定。這涉及對唯讀從站進行更改,然後將其提升為新的主站。

替代技術:

  • 使用臨時table: 使用新索引建立臨時表,從原表插入數據,並以臨時表替換原表表。
  • 對錶進行分區: 將表拆分為較小的分區,分別在每個分區上建立索引,然後將分區合併回一起。
  • 使用後台程序: 建立一個單獨的後台程序,該程序會逐漸建立索引,同時表仍可用於正常操作。並非所有 MySQL 版本都支援此方法。
最新教學 更多>
  • 為什麼我的 @font-face EOT 字體無法在 IE 7、8 和 9 中透過 HTTPS 載入?
    為什麼我的 @font-face EOT 字體無法在 IE 7、8 和 9 中透過 HTTPS 載入?
    @font-face EOT 無法透過HTTPS 載入問題排查在IE 7,8 中透過HTTPS 載入@font-face EOT 字體時遇到困難,9?難題不在於HTML 頁面的HTTPS 狀態,而是透過HTTP 本身載入EOT 字型。儘管收到了適當的內容類型標頭,EOT 字體仍然難以捉摸。 調查問題...
    程式設計 發佈於2024-11-17
  • 將物件指派為 Null 實際上會影響 Java 中的垃圾收集嗎?
    將物件指派為 Null 實際上會影響 Java 中的垃圾收集嗎?
    在Java 中將物件指派為Null 對垃圾收集的影響在Java 中將未使用的物件參考指派為null 對垃圾收集的影響最小過程。現代 Java 垃圾收集器 (GC) 可以有效地運行並迅速刪除不再可達的對象,即使沒有明確 null 賦值也是如此。 但是,在某些例外情況下,顯式null 賦值可能會帶來好處...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-17
  • 如何在沒有循環的情況下有效計算 Numpy 中一維數組的滾動標準差?
    如何在沒有循環的情況下有效計算 Numpy 中一維數組的滾動標準差?
    在Numpy 中實現一維數組的高效滾動視窗滾動視窗的概念涉及迭代資料序列並應用計算指定視窗長度內的資料子集。在給定的上下文中,任務是在不使用 Python 循環的情況下計算 Numpy 中一維數組的滾動標準差。 雖然可以使用 Numpy.std 輕鬆獲得標準差,但滾動視窗部分構成了一個挑戰。然而,透...
    程式設計 發佈於2024-11-17
  • 如何在 jQuery 中選擇具有特定背景顏色的 Span?
    如何在 jQuery 中選擇具有特定背景顏色的 Span?
    定位具有特定背景顏色的元素處理 div 內的跨度集合時,目標可能是隔離具有特定背景顏色的元素。雖然 [attribute=value] 選擇器可能看起來很直觀,但事實證明它對於根據背景顏色提取元素是無效的,因為 span 缺少該名稱的屬性。 相反,請考慮 CSS 選擇器 $('div# so...
    程式設計 發佈於2024-11-17
  • 在 PHP 中使用綁定 SQL 變數如何提高程式碼安全性、效能和可維護性?
    在 PHP 中使用綁定 SQL 變數如何提高程式碼安全性、效能和可維護性?
    PHP 中的綁定SQL 變數:指南儘管SQL 字串很流行,但您可以透過綁定變數來增強程式碼。這樣做可以帶來許多好處,包括提高安全性、效能和可維護性。在 PHP 中,綁定變數可以毫不費力地完成,讓您能夠編寫更安全、更有效率、更易讀的程式碼。 MySQL 和 PostgreSQL 綁定技術適用於 MyS...
    程式設計 發佈於2024-11-17
  • 如何使用 Go 的 pq 套件將資料從 STDIN 匯入到 PostgreSQL?
    如何使用 Go 的 pq 套件將資料從 STDIN 匯入到 PostgreSQL?
    如何將行從 STDIN 匯入到 Postgresql? [重複]在 Go 中,您可以使用 pq 套件將行從 STDIN 匯入到 PostgreSQL。以下是逐步解決方案:第 1 步:準備資料庫連線import ( "database/sql" "gith...
    程式設計 發佈於2024-11-17
  • 如何解決Python中類型提示的循環導入?
    如何解決Python中類型提示的循環導入?
    沒有循環導入的Python 中的類型提示在嘗試將一個大類分成兩個較小的類時,您會遇到循環問題進口。 “main”類別導入 mixin 類,並且 mixin 類別在其類型提示中引用“main”類別。這會導致導入循環,導致類型提示無法正常運作。 要解決此問題,可以考慮以下方法:# main.py fro...
    程式設計 發佈於2024-11-17
  • 什麼是 jQuery.fn?
    什麼是 jQuery.fn?
    深入研究 jQuery.fn:原型的別名在 jQuery 庫中,您可能會遇到神秘的 jQuery.fn。這個神秘的 fn 代表什麼以及它有什麼作用? Prototype 的角色在 JavaScript 領域,prototype 屬性是至關重要的組成部分建構子。當您使用特定建構函式建立實例時,該實例將...
    程式設計 發佈於2024-11-17
  • 如何用Python實現高效率的雙向雜湊表?
    如何用Python實現高效率的雙向雜湊表?
    實現高效的雙向哈希表雙向哈希表允許鍵到值和值到鍵的查找。雖然 Python 的內建 dict 資料結構在鍵到值查找方面表現出色,但它並不能提供有效的值到鍵檢索。 實現雙向雜湊表的有效方法是利用類別擴展了標準字典。此類別名為 bidict,維護一個逆目錄,該目錄會根據對常規 dict 的任何修改自動更...
    程式設計 發佈於2024-11-17
  • PDOStatement::bindParam() 中的前導冒號真的是可選的嗎?
    PDOStatement::bindParam() 中的前導冒號真的是可選的嗎?
    PDOStatement::bindParam() 中參數名稱的前導冒號是否真的可選? PDOStatement::bindParam() 允許您使用佔位符(例如:name)在查詢中指定命名參數。文件指出命名佔位符的參數標識符應使用格式:name。然而,據觀察,:name 和 name 似乎都可以使...
    程式設計 發佈於2024-11-17
  • 如何在 JavaScript 中實現穩定排序以在排序過程中保持元素順序?
    如何在 JavaScript 中實現穩定排序以在排序過程中保持元素順序?
    JavaScript中的穩定排序目標:基於鍵對物件陣列進行高效排序,保持一致性和穩定性。 演算法建議: 雖然有許多排序演算法,但為了滿足您對穩定性的特定需求,請考慮實作不穩定排序演算法的修改版本,例如 QuickSort 或 MergeSort。 穩定排序技術:為了確保穩定性,在排序比較功能中增加一...
    程式設計 發佈於2024-11-17
  • 掌握複合元件:建構靈活且可重複使用的 React 元件
    掌握複合元件:建構靈活且可重複使用的 React 元件
    介紹 React 世界中非常有用且全面的東西是它的設計模式,因為它們有助於保持程式碼的可擴展性並為我們創建的元件添加意義。 有多種模式,在本文中我們將討論複合組件,這是一種高級模式,對於創建靈活的複合介面特別有用。 什麼是複合組件? 複合元件是 React 中的...
    程式設計 發佈於2024-11-17
  • ## 雙波形符運算子 (~~) 在 JavaScript 中有何作用?
    ## 雙波形符運算子 (~~) 在 JavaScript 中有何作用?
    JavaScript 中的雙波號運算子(~~)在JavaScript 中,~~ 運算子是一個型別強制運算子,它會刪除後面的所有內容數字的小數點。這與 ~ 運算子不同,~ 運算子是位元 NOT 運算符,可反轉值的位元。 操作 運算子的工作原理是先將其值轉換為運算元為有符號 32 位元整數。這意味著即使...
    程式設計 發佈於2024-11-17
  • 如何在 Python 中執行模糊字串比較?
    如何在 Python 中執行模糊字串比較?
    Python 中的模糊字符串比較:有效模組在處理字符串中的潛在變化和錯誤時,需要進行模糊字符串比較。為這項任務找到合適的 Python 模組至關重要。這個問題尋求一個可以提供相似性百分比的模組,允許各種比較選項。 difflib: A Versatile Tool for Fuzzy Compar...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3