使用 unbuffered cursor 可以避免內存問題。
成都創新互聯專注于企業成都營銷網站建設、網站重做改版、吉木乃網站定制設計、自適應品牌網站建設、HTML5建站、商城網站制作、集團公司官網建設、成都外貿網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為吉木乃等各大城市提供網站開發制作服務。
cursor 默認使用 buffered 模式。這種模式會把所有結果集返回并載入內存。如果結果集很大的話,內存會爆。
unbuffered cursor 是每次只將下一行結果返回,內存占用很小。不過這種模式缺點很多,所以沒有作為默認的模式。
1.查參數配置
目前積累的使用經驗中,存儲過程函數觸發器視圖 在MySQL場景下是不適合的。性能不好,又容易發現內存不釋放的問題,所以建議盡量避免.
2.存儲過程函數
3.視圖
4.觸發器
5.1 總內存使用
5.2 分事件統計內存
5.3 賬號級別統計
5.4 線程對應sql語句,內存使用統計
5.5 打開所有內存性能監控,會影響性能,需注意
5.6 系統表內存監控信息
6.top 命令
8.ps命令
9.pmap 命令
pmap是Linux調試及運維一個很好的工具,查看進程的內存映像信息
用法1:執行一段時間記錄數據變化,最少20個記錄,下面69265是MySQL pid
用法2:linux 命令pmap MySQL pid導出內存,下面69265是MySQL pid
RSS就是這個process實際占用的物理內存。
Dirty: 臟頁的字節數(包括共享和私有的)。
Mapping: 占用內存的文件、或[anon](分配的內存)、或[stack](堆棧)。
writeable/private:進程所占用的私有地址空間大小,也就是該進程實際使用的內存大小。
1.首先使用/top/free/ps在系統級確定是否有內存泄露。如有,可以從top輸出確定哪一個process。
2.pmap工具是能幫助確定process是否有memory leak。確定memory leak的原則:writeable/private (‘pmap –d’輸出)如果在做重復的操作過程中一直保持穩定增長,那么一定有內存泄露
1.修改配置文件,擴大查詢內存方面的,例如tmp_table_size,還有別的根據實際情況放大點
2.優化查詢語句,盡量避免查詢整張表的數據
生產環境中,MySQL 不經意間吃掉全部的內容,然后開始吃掉 SWAP,性能一降再降,怎么辦?
可以從下面三點查看原因:
MySQL 使用內存,有兩個途徑。
永久占用的內容
比如全局緩沖區(Global Buffer)類別,是在服務器啟動期間從操作系統獲得的,不會釋放到任何一個別的進程。
動態請求的內存
線程緩沖區由MySQL使用,它是在處理新查詢時從操作系統請求的內存。在執行查詢之后,該內存被釋放回操作系統。
這意味著 MySQL 的內存使用,是 全局緩沖區 加上 線程緩沖區 以及 允許的最大連接數 。
對于專用數據庫服務器,該值需要保持在服務器內存的90%以下。在共享服務器的情況下,它應該保持在服務器內存的50%以下。
檢查一下 MySQL 設置,有助于確定內存使用情況,從而為 MySQL 分配合適的值。
一個近似的公式:
當網站受到攻擊時,有可能在短時間內建立異常高的連接數量。MySQL 中的 PROCESSLIST 可用于檢測頂級用戶并阻止對濫用連接的訪問。
找出查詢需要很長時間才能執行的語句,因為這些查詢需要進一步優化服務器才能更好地執行,可以通過服務器查詢日志進行識別。由于查詢速度慢,導致磁盤讀取較多,導致內存和CPU使用率較高,影響服務器性能。
最后,到了加內存條的時候了。雖然在優化數據庫設置之后,服務器會不斷地路由到使用交換內存,但也必須增加內存。俗話說:“巧婦難為無米之炊”,就是這個意思。
上面說的這些方向,大家可以在實際操作中驗證體會,希望大家在數據庫優化的路上,麻溜順暢,砥礪前行。
錯誤編號:2008
問題分析:
MySQL
client
ran
out
of
memory
錯誤指向了MySQL客戶mysql。這個錯誤的原因很簡單,
內存泄漏,直到耗盡內存,客戶沒有足夠的內存存儲全部結果。
解決方法:
釋放占用的內存。
run
out
of
意為“用完”,主語只能是人。
例句:
He
has
run
out
of
red
ink.
他的紅墨水用完了。
We
run
out
of
coal,
and
had
to
burn
wood.
我們的煤用完了,所以不得不燒柴。
If
we
run
out
of
money,
we
can
sell
some
of
the
products
in
Guangzhou.
如果我們的錢用完了,可以在廣州賣掉一些產品。
使用mysql_unbuffered_query(), 可以避免內存的立即占用, 如果返回的結果存放到array中也是完全沒有問題的, 也不會出現php查詢mysql數據量過大時導致內存溢出問題.
這種情況一般會在單表數據表數據庫比較大的時候出現,建議在使用的過程中限制單次讀取數據條數,或者對數據表進行分表
分享文章:mysql內存泄漏怎么辦,怎么解決內存泄漏
標題來源:http://www.yijiale78.com/article20/hodhjo.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、網站建設、響應式網站、軟件開發、小程序開發、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯