1
我構建了一個存儲過程,它構建一個內存臨時表A
,然後通過循環遍歷標準遊標的結果來填充數據。數據通過我的數據庫中其他MyISAM表中的多個連接選擇到臨時表中。 SP工作正常,但它正在運行在滿表的內存限制之上。爲了解決這個問題,我啓動了內存限制:存儲過程使用比預期更多的內存方式
set @@tmp_table_size=127108864; (121MEGs)
set @@max_heap_table_size=127108864; (121MEGs)
這是關於如何讓SP成功運行。這對我來說似乎很奇怪,因爲創建並返回的表A
(通過select * from A)只有16MEG的大小。我不確定是什麼導致了內存需求的其他部分,大約是100MEG。似乎SP正在使用比需要更多的內存。我的猜測是,在SP中作爲遊標循環的一部分運行的連接在運行後將它們的臨時表保留下來,並且只有在SP完成執行後纔會清理它們。這意味着一大堆加入的臨時表在內存中浮動。有沒有什麼辦法可以阻止這種情況,或者驗證這些額外內存是否被SP遊標循環內部的這些連接所吸引?這種記憶會不會來自別的東西?感謝任何有幫助的人。
就行了。謝謝。任何想法,當我發現有問題的查詢時該怎麼辦? – usumoio
優化它,創建索引,重新構建數據庫,重新思考架構,沒有一個解決方案:( –
我知道:'(你是對的,我只是一個在辦公室的人,太晚了,希望更多比睡覺還好,謝謝你們。 – usumoio