code

쿼리 크기 찾기

starcafe 2023. 6. 7. 23:02
반응형

쿼리 크기 찾기

기준max_allowed_packetMySQL의 구성 매개 변수, 특정 구성과 관련된 쿼리의 크기를 어떻게 결정할 수 있는지 알고 싶습니다.

우리는 사용할 수 있습니다.SHOW VARIABLES LIKE 'max_allowed_packet'명령을 사용할 수 있습니다.이렇게 하면 매개 변수의 현재 값이 제공되며, 이 값을 사용하여 쿼리 크기를 계산할 수 있습니다.추가적으로, 당신은 또한 사용할 수 있습니다.SET GLOBAL max_allowed_packet매개 변수의 새 값을 설정하는 명령입니다.

제 질문은:이 구성과 비교한 쿼리의 크기를 확인하려면 어떻게 해야 합니까?

패킷에 대한 MariaDB 프로토콜 문서에는 클라이언트에서 보내는 각 패킷이 max_allowed_packet 제한보다 작아야 한다고 나와 있습니다.즉, 모든 SQL 쿼리는 다음보다 짧아야 합니다.max_allowed_packet대부분의 경우 SQL 문을 사용하여 대량의 데이터 배치를 삽입하지 않는 한 이 문제는 걱정할 필요가 없습니다.

네트워크 패킷에 오버헤드가 있기 때문에 16Mib보다 짧은 쿼리에 대한 경험칙은 쿼리의 문자열 길이(바이트)를 가져와서 1바이트를 빼는 것입니다. 패킷 헤더의 길이는 SQL 쿼리와 COM_QUERY 바이트가 됩니다.일반적으로 한계를 맞추기 위해 이렇게 멀리 가는 것은 거의 가치가 없으며 한계를 훨씬 밑도는 것이 더 실용적인 접근 방식인 경향이 있습니다.

이것은 서버가 이보다 긴 패킷을 생성하지 않는다는 것을 의미하지 않습니다.다음은 서버가 다음 제한을 초과하는 예입니다.max_allowed_packet:

MariaDB [test]> SET @a = (SELECT GROUP_CONCAT(seq) FROM seq_0_to_1000000);
Query OK, 0 rows affected, 1 warning (0.060 sec)

MariaDB [test]> SELECT LENGTH(@a), @@max_allowed_packet, @@group_concat_max_len;
+------------+----------------------+------------------------+
| LENGTH(@a) | @@max_allowed_packet | @@group_concat_max_len |
+------------+----------------------+------------------------+
|    1048576 |                16384 |                1048576 |
+------------+----------------------+------------------------+
1 row in set (0.001 sec)
 
MariaDB [test]> SELECT LENGTH(@a), @a\G
*************************** 1. row ***************************
LENGTH(@a): 1048576
        @a: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
... More data ...

의 가치max_allowed_packet또한 결과 집합의 크기와도 관련이 없습니다.다음을 통해 테라바이트 크기의 결과를 생성할 수 있습니다.max_allowed_packet16Kib로 설정합니다.이 문제는 결과 집합이 패킷의 스트림이기 때문에 발생하며, 각 개별 패킷이 제한보다 낮을 경우 결과 시간에 제한이 없기 때문입니다.

그리고 게오르크 리히터가 논평에서 언급했듯이,@max_allowed_packet또한 일부 리터럴/테이블의 길이에도 영향을 미칩니다.예를들면,SET @a:= REPEAT("A", @@max_allowed_packet + 1)실제 SQL 문의 문자열 길이가 몇 바이트에 불과하더라도 실패합니다.

언급URL : https://stackoverflow.com/questions/75308709/find-the-size-of-a-query

반응형