MySQL 8.0 子版本中的已知問題

本頁面說明從 MySQL 適用的 Cloud SQL 5.7 升級至 MySQL 適用的 Cloud SQL 8.0 後,可能會遇到的已知問題和不相容情況。

如要進一步瞭解主要版本升級,請參閱「就地升級主要資料庫版本」。如要進一步瞭解錯誤記錄,請參閱「查看錯誤記錄」。

效能問題

以下各節說明已知效能問題。

SELECT DISTINCT 查詢相關問題

如果在 MySQL 8.0.18 至 MySQL 8.0.20 中使用 SELECT DISTINCT 查詢,效能可能會降低。與 MySQL 5.7 相比,查詢執行時間可能需要三倍。

詳情請參閱 MySQL Bug #99593。

如要解決這個問題,請按照下列疑難排解建議操作:

  • 更新至 MySQL 8.0.21、之後的任何子版本,或最新版本。
  • 如果使用 MySQL 8.0.18 至 MySQL 8.0.20,請將 internal_tmp_mem_storage_engine 資料庫旗標的值更新為 memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

GROUP BY 查詢相關問題

如果在 MySQL 8.0.36 或更早版本中使用 SELECT... GROUP BY 查詢,效能可能會降低,查詢執行時間也會增加。

如果查詢使用 TempTable 引擎,可能會發生這種情況。

詳情請參閱 MySQL 錯誤 #107700

如要解決這個問題,請按照下列疑難排解建議操作:

  • 更新至 MySQL 8.0.37、之後的任何子版本,或最新版本。
  • 如果使用 MySQL 8.0.36 或更早版本,請更新 internal_tmp_mem_storage_engine 資料庫旗標,改用記憶體引擎,而非暫時性資料表引擎:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

並行執行緒數量較少時的問題

在 MySQL 8.0.22 以上版本中建立的執行個體,若支援低並行執行緒的用戶端應用程式,可能會發生效能問題,並增加查詢執行時間。

MySQL 8.0.22 導入了 innodb_log_writer_threads 標記,可提升高並行系統的效能。這項標記預設為啟用。如果您在 MySQL 8.0.22 以上版本中建立的執行個體支援低並行執行緒的用戶端應用程式,建議停用 innodb_log_writer_threads 旗標。

詳情請參閱 MySQL Bug #93734。

JOINS 相關問題

如果您在 MySQL 8.0.29 至 MySQL 8.0.32 版本的執行個體中使用 JOIN 查詢搭配 eq_ref 檢視畫面,可能會遇到嚴重的效能問題。

詳情請參閱 MySQL Bug #109361。

如要解決這個問題,請更新至 MySQL 8.0.33、之後的任何子版本,或是最新版本。

LIMIT 和 ORDER BY 子句的問題

如果在 MySQL 8.0.32 或更早版本中,使用 LIMIT 和 ORDER BY 子句執行查詢,可能會遇到效能問題。在某些情況下,與 MySQL 5.7 相比,MySQL 8.0 可能會對相同查詢使用不同的查詢計畫。

詳情請參閱「MySQL 8.0.33 的變更」。

如要解決這個問題,請更新至 MySQL 8.0.33、之後的任何子版本,或是最新版本。

MySQL 8.0 中的記憶體流失問題

下列章節將說明 MySQL 8.0 以上版本中已知的記憶體流失問題。這些問題也可能影響執行個體效能。

範圍查詢導致的記憶體流失

如果在 MySQL 8.0.16 至 MySQL 8.0.28 的執行個體中使用範圍最佳化工具,程式碼檔案和函式 memory/sql/THD::main_mem_root 可能會耗用大量記憶體。這可能會導致執行個體記憶體不足 (OOM)。

詳情請參閱 MySQL Bug #105331。

如要解決這個問題,請更新至 MySQL 8.0.29、任何後續子版本或最新版本。

與預存程序相關的記憶體流失

如果您在 MySQL 8.0.27 至 8.0.31 版本的執行個體中,於預存程序執行查詢,則查詢可能會耗用 memory/sql/sp_head::execute_mem_root 程式碼檔案和函式下的大量記憶體。

詳情請參閱 MySQL Bug #107327。

如要解決這個問題,請更新至 MySQL 8.0.32、任何後續子版本或最新版本。

使用 SELECT 存取檢視區塊時導致記憶體流失

如果您在 MySQL 8.0.35 或更早版本中使用 SELECT 查詢,且應用程式使用大量檢視呼叫,則可能會發生明顯的記憶體流失問題。

此外,如果 DEFINER 檢視區塊設為 root@'%' 或衍生自 cloudsqlsuperuser 角色的使用者,可能會發生記憶體流失問題。這是因為 cloudsqlsuperuser 角色具有部分撤銷權限。

詳情請參閱 MySQL Bug #103133。

如要解決這個問題,請按照下列疑難排解建議操作:

  • 更新至 MySQL 8.0.36、任何後續子版本或最新版本。
  • 如果使用 MySQL 8.0.35 或更早版本,請為 DEFINER 檢視畫面使用個別使用者,特別是沒有部分撤銷權限的使用者。如果必須使用 root@'%' 使用者或 cloudsqlsuperuser 角色,請確保只將這些角色用於管理程序,而非應用程式查詢。如果記憶體流失問題持續發生,請升級至 MySQL 8.0.36、後續任何子版本或最新版本。

複製問題

下節將說明複寫相關已知問題。

平行複製相關問題

如果在使用平行複製功能的多執行緒副本中啟用 slave_preserve_commit_order 元件,且執行個體用於高寫入工作負載,則執行個體作業可能會因死結和累積的複製延遲時間而無限期暫停。

這個問題會出現在 MySQL 8.0.27 至 MySQL 8.0.32。

詳情請參閱 MySQL Bug #95863 和 MySQL Bug #103636。

如要解決這個問題,請按照下列疑難排解建議操作:

  • 更新至 MySQL 8.0.33、任何後續子版本或最新版本。
  • 停用並行複製功能,有助於確認問題原因,然後排定適當的升級時間。雖然停用平行複製功能可以暫時解決問題,但我們不建議將此做為長期解決方案。

權限問題

下列各節將討論與權限相關的已知問題。

權限變更

MySQL 已變更 MySQL 8.0 中的安全性和帳戶管理系統。

升級至 MySQL 8.0 後,在 MySQL 5.7 中建立的使用者可能不會具備與在 MySQL 8.0 中建立的使用者相同的權限和存取權。因此,在下列情況下,MySQL 5.7 中建立的使用者可能會收到存取遭拒的錯誤訊息:

  • 從 MySQL 5.7 升級的使用者可能沒有 CREATE ROLE 和 DROP ROLE 權限,因為這些權限在 MySQL 5.7 中不存在。
  • 從 MySQL 5.7 升級的使用者可能無法執行 KILL 指令,因為該指令現在需要 CONNECTION_ADMIN 權限,才能在 MySQL 8.0 中運作。

詳情請參閱 MySQL 8.0 中可用的所有權限。

錯誤訊息範例如下:

    ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
  

您無法直接將任何更新後的權限指派給現有使用者。 如要解決這個問題,請具備 GRANT OPTION 權限的管理員在升級後重設使用者權限,完成主要版本升級。

詳情請參閱「就地升級資料庫主要版本」。

權限變更導致「存取遭拒」錯誤

從 MySQL 5.7 升級至 MySQL 8.0 後,由於權限問題,使用者可能無法連線至資料庫。在這種情況下,使用者可能會收到下列錯誤訊息:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

MySQL 8.0.16 導入了 partial_revokes 資料庫旗標,並預設啟用,因此可以部分撤銷使用者權限。

如果 MySQL 5.7 中建立的使用者是使用萬用字元定義,這些使用者可能無法連線至資料庫。MySQL 8.0.16 以上版本不再支援萬用字元。這表示 MySQL 無法找到資料庫和使用者的完全相符項目,因此升級時可能會遺漏部分現有的權限指派。

這個問題會影響 MySQL 8.0.16 以上版本。

詳情請參閱「設定資料庫旗標」和「安全性與帳戶管理」。

如要解決這個問題,管理員必須在 MySQL 8.0 中手動指派權限給使用者。

MySQL 5.7 和 MySQL 8.0 之間的旗標值變更

從 MySQL 5.7 升級至 MySQL 8.0 時,由於版本間的預設值有所變更,部分資料庫旗標值可能會隨之變更。這種行為可能會導致效能問題。

詳情請參閱「MySQL 8.0 中的新預設值」。

如要解決這個問題,請確認升級至 MySQL 8.0 以上版本後,MySQL 5.7 中手動指派的資料庫旗標值仍會套用。建議保留指派給系統旗標的預設值。

後續步驟