Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Masalah umum dan batasan untuk Amazon RDS for MySQL
Berikut ini adalah masalah umum dan batasan untuk menggunakan Amazon RDS for MySQL.
Topik
- Kata yang dicadangkan InnoDB
- Perilaku penyimpanan penuh untuk Amazon RDS for MySQL
- Ukuran pool buffer InnoDB tidak konsisten
- Pengoptimalan penggabungan indeks memberikan hasil yang salah
- Pengecualian parameter MySQL untuk instans DB Amazon RDS
- Batas ukuran file MySQL di Amazon RDS
- Plugin Keyring MySQL tidak didukung
- Port kustom
- Batasan prosedur tersimpan MySQL
- Replikasi berbasis GTID dengan instans sumber eksternal
- Plugin otentikasi default MySQL
- Mengesampingkan innodb_buffer_pool_size
Kata yang dicadangkan InnoDB
InnoDB
adalah kata yang dicadangkan untuk RDS for MySQL. Anda tidak dapat menggunakan nama ini untuk basis data MySQL.
Perilaku penyimpanan penuh untuk Amazon RDS for MySQL
Ketika penyimpanan menjadi penuh untuk instans DB MySQL, terkadang akan ada inkonsistensi metadata, ketidaksesuaian kamus, dan tabel orphan. Untuk mencegah masalah ini, Amazon RDS secara otomatis menghentikan instans DB yang mencapai status storage-full
.
Instans DB MySQL mencapai status storage-full
dalam kasus berikut:
-
Instans DB memiliki penyimpanan kurang dari 20.000 MiB, dan penyimpanan yang tersedia mencapai 200 MiB atau kurang.
-
Instans DB memiliki penyimpanan lebih dari 102.400 MiB, dan penyimpanan yang tersedia mencapai 1024 MiB atau kurang.
-
Instans DB memiliki penyimpanan antara 20.000 MiB dan 102.400 MiB, dan memiliki kurang dari 1% dari penyimpanan yang tersedia.
Setelah Amazon RDS menghentikan instans DB secara otomatis karena mencapai status storage-full
, Anda masih dapat memodifikasinya. Untuk memulai ulang instans DB, selesaikan setidaknya salah satu hal berikut:
-
Modifikasi instans DB untuk mengaktifkan penskalaan otomatis penyimpanan.
Untuk informasi selengkapnya tentang penskalaan otomatis penyimpanan, lihat Mengelola kapasitas secara otomatis dengan penskalaan otomatis penyimpanan Amazon RDS.
-
Modifikasi instans DB untuk meningkatkan kapasitas penyimpanan.
Untuk informasi selengkapnya tentang peningkatan kapasitas penyimpanan, lihat Meningkatkan kapasitas penyimpanan instans DB.
Setelah Anda melakukan salah satu perubahan ini, instans DB dimulai ulang secara otomatis. Untuk informasi tentang memodifikasi instans DB, lihat Memodifikasi instans DB Amazon RDS.
Ukuran pool buffer InnoDB tidak konsisten
Untuk MySQL 5.7, saat ini terdapat bug dalam cara pengelolaan ukuran pool buffer. MySQL 5.7 mungkin menyesuaikan nilai parameter innodb_buffer_pool_size
ke nilai yang besar yang dapat mengakibatkan pool buffer InnoDB tumbuh terlalu besar dan menggunakan terlalu banyak memori. Efek ini dapat menyebabkan mesin basis data MySQL berhenti berjalan atau dapat mencegahnya untuk menyala. Masalah ini lebih umum untuk kelas instans DB yang memiliki memori lebih sedikit.
Untuk mengatasi masalah ini, tetapkan nilai parameter innodb_buffer_pool_size
ke beberapa produk nilai parameter innodb_buffer_pool_instances
dan nilai parameter innodb_buffer_pool_chunk_size
. Misalnya, Anda dapat mengatur nilai parameter innodb_buffer_pool_size
ke beberapa kali delapan kali lipat produk nilai parameter innodb_buffer_pool_instances
dan innodb_buffer_pool_chunk_size
, seperti yang ditunjukkan dalam contoh berikut.
innodb_buffer_pool_chunk_size = 536870912 innodb_buffer_pool_instances = 4 innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184
Untuk detail tentang bug MySQL 5.7, lihat https://bugs.mysql.com/bug.php?id=79379
Pengoptimalan penggabungan indeks memberikan hasil yang salah
Kueri yang menggunakan pengoptimalan penggabungan indeks mungkin memberikan hasil yang salah karena bug di pengoptimal kueri MySQL yang diperkenalkan di MySQL 5.5.37. Saat Anda mengeluarkan kueri terhadap tabel dengan beberapa indeks, pengoptimal memindai rentang baris berdasarkan beberapa indeks, tetapi tidak menggabungkan hasil bersama-sama dengan benar. Untuk informasi selengkapnya tentang bug pengoptimal kueri, lihat http://bugs.mysql.com/bug.php?id=72745
Misalnya, pertimbangkan kueri pada tabel dengan dua indeks di mana argumen pencarian mereferensikan kolom yang diindeks.
SELECT * FROM table1 WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
Dalam kasus ini, mesin pencari akan mencari kedua indeks. Namun, karena adanya bug, hasil gabungan salah.
Untuk mengatasi masalah ini, Anda dapat melakukan salah satu dari yang berikut:
Tetapkan parameter
optimizer_switch
keindex_merge=off
di grup parameter DB untuk instans DB MySQL Anda. Untuk informasi tentang pengaturan parameter grup parameter DB, lihat Menggunakan grup parameter.-
Tingkatkan instans DB MySQL Anda ke MySQL versi 5.7 atau 8.0. Untuk informasi selengkapnya, lihat Meng-upgrade mesin DB MySQL.
-
Jika Anda tidak dapat meningkatkan instans Anda atau mengubah parameter
optimizer_switch
, Anda dapat mengatasi bug dengan mengidentifikasi indeks untuk kueri secara eksplisit, misalnya:SELECT * FROM table1 USE INDEX covering_index WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
Untuk informasi selengkapnya, lihat Index merge optimization
Pengecualian parameter MySQL untuk instans DB Amazon RDS
Beberapa parameter MySQL memerlukan pertimbangan khusus saat digunakan dengan instans DB Amazon RDS.
lower_case_table_names
Karena Amazon RDS menggunakan sistem file yang peka huruf besar/kecil, pengaturan nilai parameter server lower_case_table_names
menjadi 2 (nama disimpan seperti yang diberikan tetapi dibandingkan dalam huruf kecil) tidak didukung. Berikut adalah nilai yang didukung untuk instans DB Amazon RDS for MySQL:
-
0 (nama yang disimpan seperti yang diberikan dan perbandingan peka terhadap huruf besar-kecil) didukung untuk semua versi RDS for MySQL.
-
1 (nama yang disimpan dalam huruf kecil dan perbandingan tidak peka terhadap huruf besar-kecil) didukung untuk RDS for MySQL versi 5.7 dan versi 8.0.28 dan versi 8.0 yang lebih tinggi.
Atur parameter lower_case_table_names
di dalam grup parameter DB kustom sebelum membuat instans DB. Kemudian, tentukan grup parameter DB kustom ketika Anda membuat instans DB.
Ketika grup parameter dikaitkan dengan instans DB MySQL dengan versi di bawah 8.0, kami sarankan Anda tidak mengubah parameter lower_case_table_names
di dalam grup parameter. Mengubahnya dapat menyebabkan ketidakkonsistenan dengan cadangan point-in-time pemulihan dan membaca instance replika DB.
Ketika sebuah grup parameter dikaitkan dengan instans DB MySQL versi 8.0, Anda tidak dapat mengubah parameter lower_case_table_names
di dalam grup parameter tersebut.
Replika baca harus selalu menggunakan nilai parameter lower_case_table_names
yang sama dengan instans DB sumber.
long_query_time
Anda dapat menyetel parameter long_query_time
ke nilai titik mengambang sehingga Anda dapat mencatatkan kueri lambat ke log kueri lambat MySQL dengan resolusi mikrodetik. Anda dapat mengatur nilai seperti 0,1 detik, yang akan menjadi 100 milidetik, untuk memudahkan debugging transaksi lambat yang membutuhkan waktu kurang dari satu detik.
Batas ukuran file MySQL di Amazon RDS
Untuk instance MySQL DB, batas penyimpanan maksimum yang disediakan membatasi ukuran tabel hingga ukuran maksimum 16 TB saat menggunakan ruang tabel InnoDB. file-per-table Batasan ini juga membatasi ruang tabel sistem hingga ukuran maksimum sebesar 16 TB. file-per-table Ruang tabel InnoDB (dengan tabel masing-masing di tablespace mereka sendiri) diatur secara default untuk instance MySQL DB.
catatan
Beberapa instans DB yang ada memiliki batas yang lebih rendah. Misalnya, instans DB MySQL yang dibuat sebelum April 2014 memiliki batas ukuran file dan tabel 2 TB. Batas ukuran file 2 TB ini juga berlaku untuk instans DB atau replika baca yang dibuat dari snapshot DB yang diambil sebelum April 2014, terlepas dari kapan instans DB dibuat.
Ada keuntungan dan kerugian untuk menggunakan InnoDB file-per-table tablespaces, tergantung pada aplikasi Anda. Untuk menentukan pendekatan terbaik untuk aplikasi Anda, lihat F ile-per-table tablespace dalam dokumentasi
Kami tidak menyarankan Anda membiarkan tabel berkembang hingga ukuran file maksimum. Secara umum, praktik yang lebih baik adalah membagi data menjadi tabel yang lebih kecil, yang dapat meningkatkan waktu performa dan pemulihan.
Salah satu opsi yang dapat Anda gunakan untuk memecah tabel ke dalam tabel yang lebih kecil adalah partisi. Partisi mendistribusikan porsi tabel besar ke dalam file terpisah berdasarkan aturan yang Anda tentukan. Misalnya, jika menyimpan transaksi berdasarkan tanggal, Anda dapat membuat aturan partisi yang mendistribusikan transaksi lama ke dalam file terpisah menggunakan partisi. Kemudian, Anda secara berkala dapat mengarsipkan data transaksi historis yang tidak diperlukan aplikasi Anda. Untuk informasi selengkapnya, lihat Partitioning
Karena tidak ada tabel sistem atau tampilan tunggal yang menyediakan ukuran semua tabel dan ruang tabel sistem InnoDB, Anda harus mengueri beberapa tabel untuk menentukan ukuran ruang tabelnya.
Untuk menentukan ukuran ruang tabel sistem InnoDB dan ruang tabel kamus data
-
Gunakan perintah SQL berikut untuk menentukan apakah ada ruang tabel Anda yang terlalu besar dan merupakan kandidat untuk partisi.
catatan
Ruang tabel kamus data ditujukan khusus untuk MySQL 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');
Untuk menentukan ukuran tabel pengguna InnoDB di luar ruang tabel sistem InnoDB (untuk versi MySQL 5.7)
-
Gunakan perintah SQL berikut untuk menentukan apakah salah satu tabel Anda terlalu besar dan merupakan kandidat untuk partisi.
SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
Untuk menentukan ukuran tabel pengguna InnoDB di luar ruang tabel sistem InnoDB (untuk versi MySQL 8.0)
-
Gunakan perintah SQL berikut untuk menentukan apakah salah satu tabel Anda terlalu besar dan merupakan kandidat untuk partisi.
SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
Untuk menentukan ukuran tabel pengguna non-InnoDB
-
Gunakan perintah SQL berikut untuk menentukan apakah ada tabel pengguna non-InnoDB Anda yang terlalu besar.
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';
Untuk mengaktifkan ruang meja file-per-table InnoDB
-
Setel parameter innodb_file_per_table ke
1
di dalam grup parameter untuk instans DB.
Untuk menonaktifkan ruang meja file-per-table InnoDB
-
Setel parameter innodb_file_per_table ke
0
di dalam grup parameter untuk instans DB.
Untuk informasi tentang pembaruan grup parameter, lihat Menggunakan grup parameter.
Bila Anda telah mengaktifkan atau menonaktifkan file-per-table ruang tabel InnoDB, Anda dapat mengeluarkan ALTER
TABLE
perintah untuk memindahkan tabel dari tablespace global ke tablespace sendiri, atau dari tablespace sendiri ke tablespace global seperti yang ditunjukkan pada contoh berikut:
ALTER TABLE table_name ENGINE=InnoDB;
Plugin Keyring MySQL tidak didukung
Saat ini, Amazon RDS for MySQL tidak mendukung Plugin Keyring Amazon Web Services keyring_aws
MySQL.
Port kustom
Amazon RDS memblokir koneksi ke port kustom 33060 untuk mesin MySQL. Pilih port yang berbeda untuk mesin MySQL Anda.
Batasan prosedur tersimpan MySQL
Prosedur tersimpan mysql.rds_kill dan mysql.rds_kill_query tidak dapat mengakhiri sesi atau kueri yang dimiliki oleh pengguna MySQL dengan nama pengguna lebih dari 16 karakter pada versi RDS for MySQL berikut:
-
8.0.32 dan versi 8 yang lebih rendah
-
5.7.41 dan versi 5.7 yang lebih rendah
Replikasi berbasis GTID dengan instans sumber eksternal
Amazon RDS tidak mendukung replikasi berdasarkan pengidentifikasi transaksi global (GTID) dari instans MySQL eksternal ke instans DB Amazon RDS for MySQL yang memerlukan pengaturan GTID_PURGED selama konfigurasi.
Plugin otentikasi default MySQL
RDS untuk MySQL versi 8.0.34 dan yang lebih tinggi menggunakan plugin. mysql_native_password
Anda tidak dapat mengubah pengaturan default_authentication_plugin
.
Mengesampingkan innodb_buffer_pool_size
Dengan kelas instans DB mikro atau kecil, nilai default untuk innodb_buffer_pool_size
parameter mungkin berbeda dari nilai yang dikembalikan dengan menjalankan perintah berikut:
mysql> SELECT @@innodb_buffer_pool_size;
Perbedaan ini dapat terjadi ketika Amazon RDS perlu mengganti nilai default sebagai bagian dari pengelolaan kelas instans DB. Jika perlu, Anda dapat mengganti nilai default dan mengaturnya ke nilai yang didukung oleh kelas instans DB Anda. Untuk menentukan nilai yang valid, tambahkan penggunaan memori dan total memori yang tersedia pada instans DB Anda. Untuk informasi selengkapnya, lihat jenis instans Amazon RDS
Jika instans DB Anda hanya memiliki 4 GB memori, Anda tidak dapat mengatur innodb_buffer_pool_size
ke 8 GB tetapi Anda mungkin dapat mengaturnya ke 3 GB, tergantung pada berapa banyak memori yang Anda alokasikan untuk parameter lain.
Jika nilai yang Anda masukkan terlalu besar, Amazon RDS menurunkan nilainya ke batas berikut:
-
Kelas instans DB mikro: 256 MB
-
db.t4g.micro kelas instans DB: 128 MB