本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
適用於我的 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 Storage Autoscaling 自動管理容量。
-
修改資料庫執行個體以增加其儲存容量。
如需增加儲存容量的詳細資訊,請參閱增加資料庫執行個體的儲存容量。
進行其中一項變更後,資料庫執行個體會自動重新啟動。如需修改資料庫執行個體的相關資訊,請參閱修改 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_instances
與 innodb_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
索引合併最佳化傳回不正確的結果
由於 My SQL 5.5.37 中引入的「我的查詢最佳化工具」中的錯誤,使用索引合併最佳化的SQL查詢可能會傳回不正確的結果。當您對具有多個索引的資料表發出查詢請求,最佳化工具可以根據多個索引來掃描資料列範圍,卻無法正確地合併結果。如需查詢最佳化工具錯誤的詳細資訊,請參閱我的SQL錯誤資料庫中的 http://bugs.mysql.com/bug.php?id=72745
例如,考慮對具有兩個索引的資料表進行查詢,其中搜尋引數會參考具索引的資料欄。
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_kill和mysql.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