Mengapa mengatur `group_concat_max_len` di bawah maksimum?

9

MySQL 5.5.28 di Ubuntu 12.04

Jika hasilnya lebih lama dari group_concat_max_lenitu hasilnya terpotong dengan tidak menarik.

Saat ini saya memiliki skrip yang mencoba memeriksa panjang yang diperlukan sebelumnya dan menetapkan group_concat_max_lenagar cukup besar.

Tetapi pemeriksaan menambahkan pertanyaan tambahan. Apakah ada kerugian untuk hanya menetapkan group_concat_max_lenke nilai maksimum? Sisi positifnya adalah lebih sedikit kueri.

Butkus Buttle
sumber
Pertanyaannya sepertinya "Jika saya mengaturnya terlalu tinggi, apakah saya akan kehabisan RAM dan crash, atau sesuatu?". Sementara itu, 1024 byte adalah jumlah yang sepele, dan tampaknya tidak perlu untuk mengaturnya di bawah itu.
Rick James
@ RickJames RAM, CPU, dll, ya. "Akankah permintaan itu memakan waktu lama atau menghabiskan sebagian besar sumber daya sistem?"
Buttle Butkus
1
Tetapi, jika Anda mengatakan 1G, apakah itu langsung menggunakan 1G, atau apakah itu dimulai dengan nilai yang kecil dan naik jika diperlukan?
Rick James
1
Saya memiliki skrip yang sama. Saya ingin menjelaskan string 1M 32 karakter. Saya awalnya terkejut melihat bahwa mereka mengambil 329999999 byte di buffer group_concat. Pesan moral dari cerita ini adalah jangan lupa untuk koma.
MatrixManAtYrService

Jawaban:

2

Sesuai BOL MySQL Di Sini

Nilai maksimum untuk group_concat_max_lenuntuk 64-bit adalah 18446744073709551615

&

Nilai maksimum untuk group_concat_max_lenuntuk 32-bit adalah 4294967295

Hasilnya dipotong ke panjang maksimum yang diberikan oleh group_concat_max_lenvariabel sistem, yang memiliki a default value of 1024. Nilai dapat ditetapkan lebih tinggi, meskipun panjang maksimum efektif dari nilai pengembalian dibatasi oleh nilai max_allowed_packet. Sintaks untuk mengubah nilai group_concat_max_lenat runtimeadalah sebagai berikut, di mana val adalah unsigned integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Catatan: The maximum permittedpanjang mengakibatkan bytesuntuk GROUP_CONCAT()fungsi. Standarnya adalah 1024.

Sebagai blog yang didokumentasikan MySQL Di Sini Menggunakan GROUP_CONCATdengan group_concat_max_lenpengaturan kecil ? Hasil Anda akan silently truncated(pastikan untuk memeriksa peringatan itu).

Seperti Blog MySQL dari Sini : Parameter ini membatasi panjang teks hasil gabungan. Defaultnya adalah . Saya pikir ini adalah nilai yang sangat rendah. Saya telah menggunakan semakin banyak, baru-baru ini, untuk menyelesaikan masalah yang sulit. Dan dalam kebanyakan kasus, adil , menghasilkan diam (Argh!) Memotong hasil, sehingga mengembalikan hasil yang salah. Sangat menarik untuk mengetahui bahwa nilai maksimum untuk parameter ini dibatasi oleh . Saya akan menyarankan, kemudian, bahwa parameter ini harus dihapus sama sekali, dan miliki sebagai . Kalau tidak, saya ingin memiliki , dalam urutan beberapa .@Shlomi Noach group_concat_max_lenmaximumGROUP_CONCAT1024GROUP_CONCAT1024too lowmax_packet_sizemax_packet_size limitationonly limitationvery large default valueMB

Untuk Lebih Lanjut ref Anda Di Sini & Di Sini

Md Haidar Ali Khan
sumber
Pertanyaan saya sedikit lebih bernuansa dan terperinci. Saya sudah membaca manual sehingga pekerjaan copy-paste Anda tidak membantu saya. Terima kasih atas usahanya.
Buttle Butkus
@Buttle Butkus, Masing-masing dan setiap aplikasi mereka memiliki beberapa set ukuran parameter variabel lingkungan standar, min dan maks.
Md Haidar Ali Khan
Ya, saya ingin tahu tentang dampak kinerja mengubah pengaturan ini. Apakah akan membuat dampak besar SEMUA pertanyaan atau hanya yang di mana rangkaian besar terjadi?
Buttle Butkus
1
@ButtleButkus, Anda tahu bahwa "SET GLOBAL" berarti pengaturan akan memengaruhi semua koneksi MySQL lainnya di server Anda, dan pengaturan bahkan akan bertahan setelah sesi Anda saat ini selesai, sampai Anda mengaturnya ke hal lain? Anda mungkin ingin menggunakan "SET SESI" jika Anda hanya ingin nilai mempengaruhi sesi Anda saat ini.
Md Haidar Ali Khan
1
Terima kasih, tetapi saya sudah tahu hal-hal itu dan tidak ada hubungannya dengan pertanyaan saya.
Buttle Butkus
2

Saya menghargai pertanyaan ini agak lama sekarang, tetapi jika seseorang menemukannya dan bertanya-tanya, satu kelemahan dari pengaturan nilai maksimum (atau yang sangat besar) adalah group_concat dapat mengembalikan gumpalan daripada varchar. Saran di tempat lain mengatakan untuk mengatur group_concat_max_len ke 512 agar selalu mengembalikan varchar daripada gumpalan. Saya cenderung hanya melemparkannya ke char jika perlu.

Peter
sumber