2013-05-15 31 views
1

我問這個問題的原因是我想確定一些查詢是否會使用比query_cache_limit更多的內存。有人建議使用'show table status'如'table_name'。我認爲這與這個問題無關。謝謝。如何獲取用於mysql查詢的內存大小?

+0

當你說的內存大小的使用,我的答案我假定你的意思了業績不佳的查詢服務器的影響你想檢查。如果它只是結果集的大小或更高的級別,請通過任何方式忽略我的答案 – Drew

回答

1

結果集的大小在股票MySQL中不可用。

Percona Server確實支持此信息,通過在其擴展的慢查詢日誌格式中添加一個字段。查看此日誌中的「Bytes_sent」字段。

http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.html#memory-footprint

+0

感謝Bill,但MySql如何判斷結果集是否超出限制?應該有一些方法來完成這項工作。 – user1342336

+0

是的,但並非所有的內部測量都暴露給用戶。 –

1

注意這不是爲微弱的心臟。並在另一個盒子上做,而不是生產!

停止mysql並在valgrind的視圖下啓動它。

做你的事一段時間。例如運行一個使用你的例程/查詢的快速PHP。

可能最多捕獲20秒的數據使用量。

然後通過下面的停止mysql停止。

然後檢查在/ tmp目錄中的日誌文件...檢查由時間戳數據

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)