Tại sao lại đặt `group_concat_max_len` dưới mức tối đa?


9

MySQL 5.5.28 trên Ubuntu 12.04

Nếu kết quả dài hơn group_concat_max_lenthì kết quả sẽ bị cắt ngắn.

Hiện tại tôi có một tập lệnh cố gắng kiểm tra độ dài cần thiết trước thời hạn và đặt group_concat_max_len đủ lớn.

Nhưng việc kiểm tra thêm các truy vấn bổ sung. Có bất kỳ nhược điểm nào khi chỉ thiết lập group_concat_max_lengiá trị tối đa không? Ưu điểm là ít truy vấn hơn.


Câu hỏi dường như là "Nếu tôi đặt nó quá cao, tôi sẽ hết RAM và gặp sự cố hay sao?". Trong khi đó, 1024 byte là một lượng không đáng kể và dường như không cần phải đặt nó dưới mức đó.
Rick James

@RickJames RAM, CPU, v.v. Truy vấn sẽ mất nhiều thời gian hoặc sử dụng một phần lớn tài nguyên hệ thống?
Butussy Butkus

1
Nhưng, nếu bạn nói 1G, nó có sử dụng ngay 1G không, hay nó bắt đầu với một giá trị nhỏ và hoạt động theo cách của nó nếu cần?
Rick James

1
Tôi có một kịch bản tương tự. Tôi muốn chiếm chuỗi 1M 32 ký tự. Lúc đầu tôi rất ngạc nhiên khi thấy rằng chúng chiếm tới 329999999 byte trong bộ đệm group_concat. Đạo đức của câu chuyện này là đừng quên tính đến dấu phẩy.
MatrixManAtYrService

Câu trả lời:


2

Theo MySQL BOL tại đây

Giá trị tối đa group_concat_max_lencho 64 bit là 18446744073709551615

&

Giá trị tối đa group_concat_max_lencho 32 bit là 4294967295

Kết quả được cắt ngắn theo chiều dài tối đa được đưa ra bởi group_concat_max_lenbiến hệ thống, có a default value of 1024. Giá trị có thể được đặt cao hơn, mặc dù độ dài tối đa hiệu lực của giá trị trả về bị ràng buộc bởi giá trị của max_allowed_packet. Cú pháp thay đổi giá trị của group_concat_max_lenat runtimenhư sau, trong đó val là unsigned integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Lưu ý: Các maximum permittedchiều dài dẫn đến bytescho các GROUP_CONCAT()chức năng. Mặc định là 1024.

Như MySQL tài liệu blog ở đây Sử dụng GROUP_CONCATvới một group_concat_max_lenthiết lập nhỏ ? Kết quả của bạn sẽ là silently truncated(đảm bảo kiểm tra các cảnh báo mặc dù).

Như Blog của MySQL ở đây : Tham số này giới hạn độ dài văn bản của kết quả ghép. Nó mặc định là . Tôi nghĩ rằng đây là một giá trị rất thấp. Tôi đã sử dụng ngày càng nhiều, gần đây, để giải quyết các vấn đề khó khăn khác. Và trong hầu hết các trường hợp, chỉ là , dẫn đến sự im lặng (Argh!) Cắt ngắn kết quả, do đó trả về kết quả không chính xác. Thật thú vị khi biết rằng giá trị tối đa cho tham số này bị giới hạn bởi . Sau đó, tôi sẽ đề nghị rằng tham số này nên được loại bỏ hoàn toàn và có như là . Mặt khác, tôi muốn nó có một , theo thứ tự một vài@Shlomi Noach group_concat_max_lenmaximumGROUP_CONCAT1024GROUP_CONCAT1024too lowmax_packet_sizemax_packet_size limitationonly limitationvery large default valueMB .

Để biết thêm thông tin giới thiệu của bạn ở đây & đây


Câu hỏi của tôi là một chút sắc thái và chi tiết hơn. Tôi đã đọc hướng dẫn để công việc sao chép của bạn không giúp tôi. Cảm ơn các nỗ lực mặc dù.
Butussy Butkus

@Bript Butkus, Mỗi ứng dụng họ có một số kích thước tham số biến môi trường mặc định, min và max. Nếu bạn không đáp ứng ở đó xác định giới hạn tham số ngưỡng, thì ứng dụng đó sẽ hoạt động đột ngột.
Md Haidar Ali Khan

Có, tôi muốn biết về tác động hiệu suất của việc thay đổi cài đặt này. Sẽ làm cho nó ảnh hưởng lớn TẤT CẢ các truy vấn hoặc chỉ những truy vấn xảy ra sự kết hợp lớn?
Butussy Butkus

1
@BriptButkus, bạn biết rằng "SET GLOBAL" có nghĩa là cài đặt sẽ ảnh hưởng đến tất cả các kết nối MySQL khác trên máy chủ của bạn và cài đặt thậm chí sẽ tồn tại sau khi phiên hiện tại của bạn hoàn tất, cho đến khi bạn đặt nó thành một thứ khác? Bạn có thể muốn sử dụng "SET SESSION" nếu bạn chỉ muốn giá trị ảnh hưởng đến phiên hiện tại của mình.
Md Haidar Ali Khan

1
Cảm ơn bạn, nhưng tôi đã biết những điều đó và chúng không liên quan gì đến câu hỏi của tôi.
Butussy Butkus

2

Tôi đánh giá cao câu hỏi này bây giờ hơi cũ, nhưng trong trường hợp ai đó tìm thấy nó và đang tự hỏi, một nhược điểm của việc đặt giá trị tối đa (hoặc khác rất lớn) là group_concat có thể trả về một blob chứ không phải là varchar. Các đề xuất ở nơi khác nói rằng hãy đặt group_concat_max_len thành 512 để làm cho nó luôn trả về một varchar chứ không phải là một blob. Tôi có xu hướng chỉ đưa nó đến char khi cần thiết mặc dù.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.