Databases for MySQL 的最佳實踐

最佳作法
最佳作法 附註
設定正確的值 max_allowed_packet。 在大型事務或二進位日誌超出限制的複製設定中,違反 max_allowed_packet 大小可能會導致副本進入失敗的複製狀態,並導致鎖定主副本的風險。 使用 BLOB 或 VARTEXT 列在 MySQL 列中儲存檔案內容可能會導致備份複製和復原出現問題。 如果將不同長度的資料載入到任何列中,建議您將 max_allowed_packet 配置為最大值。 此外,不要在特定表中使用多個寬 LONGBLOB 列,因為這可能會導致行大小超過允許的最大值,並且使用時間點恢復可能無法正常工作。
在行數較多的表中實作主鍵。 在任何超過 5K 行的表中添加主鍵將極大地優化複製並防止過度滯後。 建議在單一語句中執行超過 5K 行的 DELETE 或 UPDATE 運算的任何資料表定義主鍵。 如果無法新增主鍵,請分批刪除 < 5K 行,並每批提交一次。
如果可能的話,優先使用 DROP TABLE 和 TRUNCATE TABLE 而不是整個表格 DELETE。 複製會記錄每一行刪除,這會顯著減慢該過程。 建議分塊刪除和更新。 請注意,DROP、CREATE 和 TRUNCATE 是 DDL 語句,它們在備份期間不會完成,而是會等到備份作業完成。 日誌條目顯示備份期間這些語句將阻塞的時間的警告訊息。 您可以透過檢查監控儀表板的磁碟使用面板來估計備份時間。 根據經驗,備份 500 GB 的資料大約需要 90 分鐘。
最大限度地減少單語句多行操作,例如 UPDATE JOIN 或 DELETE,使用 WHERE 範圍子句來最大限度地減少接觸的行數。 這種做法可以提高查詢效能並減少鎖定爭用。
在應用端使用連線池。 池化重複使用連接,避免連接最大化。 確保您的池大小遠低於資料庫的大小 max_connections。 實現重試邏輯並捕獲異常以處理池耗盡或連接失敗。
透過為每個生產應用程式使用專用的 ICD-MySQL 實例來減少爆炸半徑。 應用程式的分離降低了每個服務實例的數量,從而最大限度地減少了由於許多應用程式的需求聚合而引起的問題。
為每個 MySQL 實例部署一個 MySQL 只讀副本。 只讀副本能夠支援主執行個體的讀取流量,從而減少整體工作負載並增強可靠性。
在專用實例上託管 MySQL 針對生產環境,特別是預期將面臨業務增長、流量增加,或需要高可靠性與高性能的環境,我們強烈建議將 MySQL 部署於專用伺服器上。 這確保了更佳的資源隔離性、可擴展性及整體系統穩定性。