Masalah umum dan batasan untuk Amazon RDS for MySQL - Layanan Basis Data Relasional Amazon

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.

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:

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 dalam dokumentasi MySQL.

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 dan http://bugs.mysql.com/bug.php?id=68194 di basis data bug MySQL.

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 ke index_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 dalam dokumentasi MySQL.

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 MySQL.

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 dalam dokumentasi MySQL.

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