適用於我的 Amazon RDS 的已知問題和限制 SQL - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

適用於我的 Amazon RDS 的已知問題和限制 SQL

使用 Amazon RDS for My 版的已知問題和限制SQL如下。

InnoDB 保留字詞

InnoDB是我的保留字SQL。RDS您不能將此名稱用於 [我的SQL資料庫]。

我的 Amazon RDS 的存儲完整行為 SQL

當 My SQL DB 執行個體的儲存空間已滿時,可能會出現中繼資料不一致、字典不相符和孤立表格。為了避免這些問題,Amazon RDS 會自動停止達到該storage-full狀態的資料庫執行個體。

在下列情況下,My SQL DB 執行個體會到達storage-full狀態:

  • 資料庫執行個體的儲存空間少於 20,000 MiB,可用儲存空間達到 200 MiB 或更少。

  • 資料庫執行個體擁有超過 102,400 MiB 的儲存空間,可用儲存空間達到 1024 MiB 或更少。

  • 資料庫執行個體的儲存空間介於 20,000 MiB 和 102,400 MiB 之間,且可用的儲存空間少於 1%。

Amazon 因為資料庫執行個體已達到storage-full狀態而自動RDS停止後,您仍然可以對其進行修改。若要重新啟動資料庫執行個體,請至少完成下列其中一項:

進行其中一項變更後,資料庫執行個體會自動重新啟動。如需修改資料庫執行個體的相關資訊,請參閱修改 Amazon RDS 資料庫執行個體

InnoDB 緩衝集區大小不一致

對於我的 SQL 5.7,目前存在管理 InnoDB 緩衝池大小的方式存在錯誤。我的 SQL 5.7 可能會將innodb_buffer_pool_size參數的值調整為較大的值,這可能會導致 InnoDB 緩衝池變得太大並消耗太多內存。此效果可能會導致我的SQL資料庫引擎停止執行,或可能會阻止它啟動。對於可用記憶體更少的資料庫執行個體類別,此問題更常發生。

若要解決此問題,請將 innodb_buffer_pool_size 參數的值設為 innodb_buffer_pool_instances 參數值與 innodb_buffer_pool_chunk_size 參數值之乘積的倍數。例如,您可能將 innodb_buffer_pool_size 參數值設為 innodb_buffer_pool_instancesinnodb_buffer_pool_chunk_size 參數值之乘積的八倍,如下列範例所示。

innodb_buffer_pool_chunk_size = 536870912 innodb_buffer_pool_instances = 4 innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184

有關此我的 SQL 5.7 錯誤的詳細信息,請參閱 https://bugs.mysql.com/bug.php? 我的文檔中的 ID = 79379。SQL

索引合併最佳化傳回不正確的結果

由於 My SQL 5.5.37 中引入的「我的查詢最佳化工具」中的錯誤,使用索引合併最佳化的SQL查詢可能會傳回不正確的結果。當您對具有多個索引的資料表發出查詢請求,最佳化工具可以根據多個索引來掃描資料列範圍,卻無法正確地合併結果。如需查詢最佳化工具錯誤的詳細資訊,請參閱我的SQL錯誤資料庫中的 http://bugs.mysql.com/bug.php?id=72745http://bugs.mysql.com/bug.php?id=68194

例如,考慮對具有兩個索引的資料表進行查詢,其中搜尋引數會參考具索引的資料欄。

SELECT * FROM table1 WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';

在此情況下,搜尋引擎將搜尋這兩個索引。不過,由於錯誤,合併的結果會不正確。

若要解決此問題,您可以執行下列項目之一:

  • 將 My DB 執行個體index_merge=off的資料庫參數群組中的SQL參數設定為。optimizer_switch如需設定資料庫參數群組參數的相關資訊,請參閱 的參數組 RDS

  • 將您的我的SQL資料庫執行個體升級至我的 5.7 或 8.0 SQL 版。如需詳細資訊,請參閱RDS 適用於 MySQL 資料庫引擎的 升級

  • 如果您無法升級執行個體或變更 optimizer_switch 參數,則可以藉由明確地識別查詢的索引來解決錯誤,例如:

    SELECT * FROM table1 USE INDEX covering_index WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';

如需詳細資訊,請參閱 My SQL 文件中的索引合併最佳化

我的 Amazon RDS 資料庫執行個體的SQL參數例外

某些 My SQL 參數在搭配 Amazon RDS 資料庫執行個體使用時需要特殊考量。

lower_case_table_names

由於 Amazon RDS 使用區分大小寫的檔案系統,因此不支援將lower_case_table_names伺服器參數的值設定為 2 (以指定方式儲存但以小寫形式比較的名稱)。以下是我的資料庫執行個體支援的 SQL Amazon RDS 值:

  • 我的SQL版本支持 0(存儲為給定的名稱和比較區分大小寫)。RDS

  • 我的 5.7 SQL 版和 8.0.28 版及更高版本 8.0 版本支援 1 (以小寫字母和比較方式儲存的名稱不區分大小寫)。RDS

在建立資料庫執行個體之前,請在自訂資料庫參數群組中設定 lower_case_table_names 參數。然後,在建立資料庫執行個體時,指定自訂資料庫參數群組。

如果參數群組與版本低於 8.0 的 My SQL DB 執行個體相關聯,建議您避免變更lower_case_table_names參數群組中的參數。變更它可能會導致 point-in-time 復原備份和僅供讀取複本資料庫執行個體不一致。

當參數群組與 8.0 版 My SQL DB 執行個體相關聯時,您無法修改lower_case_table_names參數群組中的參數。

僅供讀取複本應該一律使用與來源資料庫執行個體相同的 lower_case_table_names 參數值。

長查詢時間

您可以將long_query_time參數設定為浮點值,以便以微秒解析度將慢速查詢記錄到 My SQL 慢速查詢記錄檔。您可以設定一值,例如 0.1 秒 (即 100 微秒),以在偵錯所花時間不到一秒的緩慢交易時提供協助。

我在 Amazon 的SQL文件大小限制 RDS

對於我的SQL資料庫執行個體,在使用 InnoDB file-per-table 表空間時,佈建的最大儲存限制會將資料表的大小限制為 16 TB 的大小上限。此限制也會將系統資料表空間限制為最大 16 TB。InnoDB 表 file-per-table 空間(每個表都在自己的表格空間中)默認情況下為我的SQL數據庫實例設置。

注意

部分現有的資料庫執行個體具有較低的限制。例如,2014 年 4 月之前建立的我的SQL資料庫執行個體的檔案和資料表大小限制為 2 TB。無論何時建立資料庫執行個體,此 2-TB 檔案大小限制也適用於從 2014 年 4 月之前取得之快照建立的資料庫執行個體或僅供讀取複本。

使用 InnoDB file-per-table 表空間有優點和缺點,具體取決於您的應用程序。若要判斷應用程式的最佳方法,請參閱 My SQL 文件中的 F ile-per-table 表格空間

不建議允許資料表成長至檔案大小上限。一般來說,更理想的做法是將資料表分割成更小的資料表,如此可以改善效能並縮短復原時間。

您可以用於將大型資料表分成更小資料表的選項為分割。「分割」會根據您指定的規則,將大型資料表的部分分散成個別檔案。例如,如果您依日期儲存交易,則可以建立分割規則,使用分割將較舊的交易分配成個別檔案。然後,您可以定期封存不需要立即可供應用程式使用的歷史交易資料。如需詳細資訊,請參閱 My SQL 文件中的磁碟分割

因為沒有可提供所有資料表和 InnoDB 系統資料表空間大小的單一系統資料表或檢視,因此您必須查詢多個資料表,以判斷資料表空間的大小。

決定 InnoDB 系統資料表空間和資料字典資料表空間的大小
  • 請使用下列SQL命令來判斷是否有任何表格空間太大,而且是否適合分割。

    注意

    資料說明表格空間是 My SQL 8.0 特有的。

    select FILE_NAME,TABLESPACE_NAME, ROUND(((TOTAL_EXTENTS*EXTENT_SIZE) /1024/1024/1024), 2) as "File Size (GB)" from information_schema.FILES where tablespace_name in ('mysql','innodb_system');
確定 InnoDB 系統表格空間之外的 InnoDB 用戶表的大小(對於我的 SQL 5.7 版本)
  • 使用以下SQL命令來確定是否有任何表太大,並且是分區的候選人。

    SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
確定 InnoDB 系統表格空間之外的 InnoDB 用戶表的大小(對於我的 SQL 8.0 版本)
  • 使用以下SQL命令來確定是否有任何表太大,並且是分區的候選人。

    SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
決定非 InnoDB 使用者資料表的大小
  • 使用以下SQL命令來確定您的任何非 InnoDB 用戶表是否太大。

    SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE) / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema') and ENGINE<>'InnoDB';
若要啟用 InnoDB file-per-table 表格空間
  • 在資料庫執行個體的參數群組中,將 innodb_file_per_table 參數設為 1

若要停用 InnoDB file-per-table 表格空間
  • 在資料庫執行個體的參數群組中,將 innodb_file_per_table 參數設為 0

如需更新參數群組的相關資訊,請參閱 的參數組 RDS

當您啟用或停用 InnoDB 表 file-per-table 格空間時,您可以發出ALTER TABLE指令,將表格從全域表格空間移至自己的表格空間,或從其本身的表格空間移至全域表格空間,如下列範例所示:

ALTER TABLE table_name TABLESPACE=innodb_file_per_table;

我的SQL鑰匙圈外掛程式不支援

目前,我RDS的 Amazon SQL 不支持我的 SQL keyring_aws Amazon Web Services 鑰匙圈插件。

自訂連接埠

Amazon RDS 阻止連接到我SQL的引擎的自定義端口 33060。為「我的SQL引擎」選擇不同的連接埠。

我的SQL預存程序限制

RDS對於 [我的SQL版本],mysql.rds_killmysql.rds_kill_query預存程序無法終止 [我的SQL使用者] 擁有的工作階段或查詢,且使用者名稱長度超過 16 個字元:

  • 8.0.32 和較低的 8 版本

  • 5.7.41 和較低的 5.7 版本

GTID以外部來源執行個體為基礎的複製

Amazon RDS 支援根據全域交易識別碼 (GTIDs) 從外部 My SQL 執行個體複寫到需要在組態PURGED期間設定 GTID _ 的 Amazon RDS My SQL DB 執行個體。但是,只有我RDS的 SQL 8.0.37 及更高版本支持此功能。

我的SQL默認驗證插件

RDS對於我的SQL版本 8.0.34 及更高版本使用該插件mysql_native_password。您無法變更 default_authentication_plugin 設定。

覆蓋緩衝池大小

對於微型或小型資料庫執行個體類別,innodb_buffer_pool_size參數的預設值可能與執行下列命令所傳回的值不同:

mysql> SELECT @@innodb_buffer_pool_size;

當 Amazon RDS 需要在管理資料庫執行個體類別時覆寫預設值時,可能會發生這種差異。如有必要,您可以覆寫預設值,並將其設定為資料庫執行個體類別支援的值。若要判斷有效值,請新增資料庫執行個體上可用的記憶體使用量和總記憶體。如需詳細資訊,請參閱 Amazon RDS 執行個體類型

如果您的資料庫執行個體只有 4 GB 的記憶體,則無法innodb_buffer_pool_size將其設定為 8 GB,但是可以將其設定為 3 GB,這取決於您為其他參數配置了多少記憶體。

如果您輸入的值太大,Amazon 會將值RDS降低到以下限制:

  • 微型資料庫執行個體類別:256 MB

  • 微型資料庫執行個體類別:128 MB