Masalah umum dalam versi minor MySQL 8.0

Halaman ini menjelaskan masalah dan ketidakcocokan umum yang mungkin Anda temui setelah melakukan upgrade versi utama dari Cloud SQL untuk MySQL 5.7 ke Cloud SQL untuk MySQL 8.0.

Untuk mengetahui informasi selengkapnya tentang upgrade versi utama, lihat Mengupgrade versi utama database secara langsung. Untuk mengetahui informasi selengkapnya tentang log error, lihat dan Melihat log error.

Masalah performa

Bagian berikut membahas masalah performa umum.

Masalah dengan kueri SELECT DISTINCT

Jika menggunakan kueri SELECT DISTINCT di MySQL 8.0.18 hingga MySQL 8.0.20, Anda mungkin mengalami penurunan performa. Waktu eksekusi kueri mungkin tiga kali lebih lama jika dibandingkan dengan MySQL 5.7.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #99593.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.21, versi minor apa pun setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.18 hingga MySQL 8.0.20, update nilai untuk flag database internal_tmp_mem_storage_engine ke memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Masalah dengan kueri GROUP BY

Jika menggunakan kueri SELECT... GROUP BY di MySQL 8.0.36 atau yang lebih lama, Anda mungkin mengalami penurunan performa dan peningkatan waktu eksekusi kueri.

Hal ini mungkin terjadi jika kueri menggunakan TempTable mesin.

Untuk mengetahui informasi selengkapnya, lihat bug MySQL #107700

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.37, versi minor apa pun setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.36 atau yang lebih lama, update flag database internal_tmp_mem_storage_engine untuk menggunakan mesin memori bukan mesin tabel sementara:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Masalah pada thread konkurensi rendah

Instance yang dibuat di MySQL 8.0.22 atau yang lebih baru yang mendukung aplikasi klien dengan thread konkurensi rendah mungkin mengalami masalah performa dan peningkatan waktu eksekusi kueri.

MySQL 8.0.22 memperkenalkan innodb_log_writer_threads flag untuk meningkatkan performa pada sistem konkurensi tinggi. Flag ini diaktifkan secara default. Jika Anda memiliki instance yang dibuat di MySQL 8.0.22 atau yang lebih baru yang mendukung aplikasi klien dengan thread konkurensi rendah, sebaiknya nonaktifkan flag innodb_log_writer_threads.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #93734.

Masalah dengan JOINS

Jika menggunakan JOIN kueri dengan tampilan eq_ref di instance yang menggunakan MySQL 8.0.29 hingga MySQL 8.0.32, Anda mungkin mengalami masalah performa yang signifikan.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #109361.

Untuk mengatasi masalah ini, update ke MySQL 8.0.33, versi minor apa pun setelahnya, atau rilis terbaru.

Masalah dengan klausa LIMIT dan ORDER BY

Jika menjalankan kueri dengan klausa LIMIT dan ORDER BY di MySQL 8.0.32 atau yang lebih lama, Anda mungkin mengalami masalah performa. Dalam beberapa kasus, rencana kueri yang berbeda mungkin digunakan di MySQL 8.0 dibandingkan dengan MySQL 5.7 untuk kueri yang sama.

Untuk mengetahui informasi selengkapnya, lihat Perubahan di MySQL 8.0.33.

Untuk mengatasi masalah ini, update ke MySQL 8.0.33, versi minor apa pun setelahnya, atau rilis terbaru.

Masalah kebocoran memori di MySQL 8.0

Bagian berikut membahas masalah kebocoran memori umum di MySQL 8.0 atau yang lebih baru. Masalah ini juga kemungkinan akan memengaruhi performa instance.

Kebocoran memori yang disebabkan oleh kueri rentang

Jika menggunakan pengoptimal rentang di instance dengan MySQL 8.0.16 hingga MySQL 8.0.28, konsumsi memori yang tinggi mungkin terjadi oleh file kode dan fungsi memory/sql/THD::main_mem_root. Hal ini dapat menyebabkan instance kehabisan memori (OOM).

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #105331.

Untuk mengatasi masalah ini, update ke MySQL 8.0.29, versi minor apa pun setelahnya, atau rilis terbaru.

Kebocoran memori yang terkait dengan prosedur tersimpan

Jika Anda menjalankan kueri dalam prosedur tersimpan di instance dengan MySQL 8.0.27 hingga 8.0.31, kueri tersebut mungkin menggunakan memori yang sangat tinggi di bawah file kode dan fungsi memory/sql/sp_head::execute_mem_root.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #107327.

Untuk mengatasi masalah ini, update ke MySQL 8.0.32, versi minor apa pun setelahnya, atau rilis terbaru.

Kebocoran memori yang disebabkan oleh akses ke tampilan menggunakan SELECT

Jika Anda menggunakan kueri SELECT di MySQL 8.0.35 atau yang lebih lama dan aplikasi Anda menggunakan banyak panggilan tampilan, Anda mungkin mengalami kebocoran memori yang terlihat.

Selain itu, jika tampilan DEFINER ditetapkan ke root@'%' atau pengguna yang berasal dari peran cloudsqlsuperuser, Anda mungkin mengalami kebocoran memori. Hal ini karena peran cloudsqlsuperuser memiliki hak istimewa pencabutan sebagian.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #103133.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.36, versi minor apa pun setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.35 atau yang lebih lama, gunakan pengguna terpisah untuk tampilan DEFINER, khususnya pengguna yang tidak memiliki hak istimewa pencabutan sebagian. Jika Anda harus menggunakan pengguna root@'%' atau peran cloudsqlsuperuser, pastikan Anda hanya menggunakannya untuk proses administratif, bukan kueri aplikasi. Jika kebocoran memori berlanjut, Anda harus mengupgrade ke MySQL 8.0.36, versi minor apa pun setelahnya, atau rilis terbaru.

Masalah Replikasi

Bagian berikut membahas masalah umum terkait replikasi.

Masalah dengan replikasi paralel

Jika menggunakan replikasi paralel di replika multithreaded yang memiliki komponen slave_preserve_commit_order yang diaktifkan, dan instance digunakan untuk workload tulis tinggi, operasi instance mungkin akan dijeda tanpa batas waktu karena deadlock dan waktu jeda replikasi yang terus bertambah.

Masalah ini terlihat di MySQL 8.0.27 hingga MySQL 8.0.32.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #95863 dan Bug MySQL #103636.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.33, versi minor apa pun setelahnya, atau rilis terbaru.
  • Nonaktifkan replikasi paralel untuk membantu memverifikasi penyebab masalah ini, lalu jadwalkan upgrade yang tepat. Meskipun menonaktifkan replikasi paralel dapat mengatasi masalah ini untuk sementara, tindakan ini tidak direkomendasikan sebagai solusi jangka panjang.

Masalah hak istimewa

Bagian berikut membahas masalah umum terkait hak istimewa.

Perubahan pada hak istimewa

MySQL telah mengubah sistem pengelolaan keamanan dan akun di MySQL 8.0.

Setelah mengupgrade ke MySQL 8.0, pengguna yang dibuat di MySQL 5.7 mungkin tidak memiliki hak istimewa dan akses yang sama dengan pengguna yang dibuat di MySQL 8.0. Akibatnya, pengguna yang dibuat di MySQL 5.7 mungkin menerima pesan error akses ditolak dalam skenario berikut:

  • Pengguna yang diupgrade dari MySQL 5.7 mungkin tidak memiliki CREATE ROLE dan DROP ROLE hak istimewa karena hak istimewa tersebut tidak ada di MySQL 5.7.
  • Pengguna yang diupgrade dari MySQL 5.7 mungkin tidak dapat menjalankan perintah KILL, yang kini memerlukan hak istimewa CONNECTION_ADMIN agar dapat berfungsi di MySQL 8.0.

Untuk mengetahui informasi selengkapnya, Anda dapat memeriksa semua hak istimewa yang tersedia di MySQL 8.0.

Contoh pesan error terlihat mirip dengan berikut ini:

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

Anda tidak dapat langsung menetapkan salah satu hak istimewa yang diupdate ini kepada pengguna yang ada. Untuk mengatasi masalah ini, administrator dengan hak istimewa GRANT OPTION harus mereset hak istimewa pengguna setelah upgrade untuk menyelesaikan upgrade versi utama.

Untuk mengetahui informasi selengkapnya, lihat Mengupgrade versi utama database secara langsung.

Perubahan pada hak istimewa menyebabkan error Akses ditolak

Pengguna yang dibuat di MySQL 5.7 yang diupgrade ke MySQL 8.0 mungkin tidak dapat terhubung ke database karena masalah hak istimewa. Dalam kasus tersebut, pengguna mungkin menerima pesan error berikut:

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

MySQL 8.0.16 memperkenalkan flag database partial_revokes dan mengaktifkannya secara default, sehingga memungkinkan pencabutan sebagian hak istimewa pengguna.

Jika pengguna yang dibuat di MySQL 5.7 ditentukan menggunakan karakter pengganti, pengguna tersebut mungkin tidak dapat terhubung ke database. Karakter pengganti tidak lagi didukung di MySQL 8.0.16 atau yang lebih baru. Artinya, MySQL tidak dapat menemukan kecocokan yang tepat untuk database dan pengguna, yang mungkin menyebabkan beberapa penetapan hak istimewa yang ada terlewatkan dalam upgrade.

Masalah ini memengaruhi MySQL 8.0.16 atau yang lebih baru.

Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database dan Pengelolaan keamanan dan akun.

Untuk mengatasi masalah ini, administrator harus menetapkan izin secara manual kepada pengguna di MySQL 8.0.

Perubahan nilai flag antara MySQL 5.7 dan MySQL 8.0

Saat Anda mengupgrade dari MySQL 5.7 ke MySQL 8.0, beberapa nilai flag database mungkin diubah karena perubahan nilai default antarversi. Perilaku ini dapat menyebabkan masalah performa.

Untuk mengetahui informasi selengkapnya, lihat Nilai default baru di MySQL 8.0.

Untuk mengatasi masalah ini, pastikan nilai flag database yang ditetapkan secara manual di MySQL 5.7 tetap diterapkan setelah upgrade ke MySQL 8.0 atau yang lebih baru. Sebaiknya biarkan nilai default yang ditetapkan ke flag sistem.

Langkah berikutnya