이 질문을하는 이유는 일부 쿼리가 query_cache_limit보다 많은 메모리를 사용하는지 확인하기 위해서입니다. 어떤 사람들은 'table_name'과 같은 테이블 상태를 보여 주며 놀랐습니다. 나는 그것이이 질문과 관련이 없다고 생각한다. 감사.mysql에서 쿼리에 사용되는 메모리 크기를 얻는 방법은 무엇입니까?
답변
결과 집합의 크기는 MySQL에 재고가 없습니다.
Percona Server 확장 슬로우 쿼리 로그 형식에 필드를 추가하여이 정보를 지원합니다. 이 로그의 "Bytes_sent"필드를보십시오.
이는 심장 약한되지 않습니다 http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.html#memory-footprint
감사합니다. Bill, 결과 집합이 한도를 초과하는지 MySql이 어떻게 판단합니까? 작업을 수행 할 수있는 방법이 있어야합니다. – user1342336
예, 일부 내부 측정 값이 사용자에게 노출되지는 않습니다. –
참고를 참조하십시오. 생산이 아닌 다른 상자에서하십시오!
mysql을 중지하고 valgrind 뷰에서 시작하십시오.
잠시 동안 당신의 일을하십시오. 예를 들어 귀하의 루틴/쿼리를 사용하는 빠른 PHP를 실행합니다.
은 최대 20 초의 데이터 사용량을 캡처 할 수 있습니다.
그런 다음 아래의 같은 중지를 통해 mysql을 중지하십시오.
다음
service mysql stop
apt-get install valgrind
valgrind --tool=massif --massif-out-file=/tmp/massif.out /etc/init.d/mysql start
#-----------
snapshot=32
#-----------
time=217073
mem_heap_B=1140
mem_heap_extra_B=324
mem_stacks_B=0
heap_tree=empty
#-----------
snapshot=33
#-----------
time=226099
mem_heap_B=1156
mem_heap_extra_B=332
mem_stacks_B=0
heap_tree=detailed
n3: 1156 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
n5: 944 0x40AA47: ??? (in /bin/dash)
n3: 832 0x41184C: ??? (in /bin/dash)
n1: 704 0x4120F5: ??? (in /bin/dash)
n1: 704 0x4020E4: ??? (in /bin/dash)
n0: 704 0x4E4E76B: (below main) (libc-start.c:226)
n1: 96 0x411EC0: ??? (in /bin/dash)
n1: 96 0x4048E3: ??? (in /bin/dash)
n1: 96 0x403BD5: ??? (in /bin/dash)
n1: 96 0x40A88C: ??? (in /bin/dash)
n1: 96 0x402159: ??? (in /bin/dash)
n0: 96 0x4E4E76B: (below main) (libc-start.c:226)
n1: 32 0x41212F: ??? (in /bin/dash)
n1: 32 0x4020E4: ??? (in /bin/dash)
n0: 32 0x4E4E76B: (below main) (libc-start.c:226)
당신이 메모리를 사용하는 크기를 말할 때, 내 대답에 난 당신이 성능이 낮은 쿼리 서버에 미치는 영향을 의미 가정 타임 스탬프로 데이터를 검사 ...을/tmp 디렉토리에 로그 파일을 검사 너는 조사하고 싶다. 결과 집합의 크기 또는 그 이상의 상위 수준 일 경우 내 대답을 모두 무시하십시오. – Drew