【MYSQL】mysql5.7-bug -information_schema的表被查詢可能導致記憶體洩漏
-
[11 May 2017 6:57] Cho-Shing Ma
-
Description:
-
Running a query (on Information _Schema.tables (where clause) to exclude system schema, showing memory growing eventually Out-of-memory. Number of table entries around 20,000 (40 databases with 500 tables for each db)
-
-
mysql -uroot -h127.0.0.1 -e "select concat_ws('|',ifnull(TABLE_SCHEMA,''),ifnull(TABLE_NAME,''),ifnull(ENGINE,''),ifnull(TABLE_ROWS,'0'),ifnull(DATA_LENGTH,'0'), ifnull(INDEX_LENGTH,'0'),ifnull(DATA_FREE,'0'), ifnull(TABLE_COLLATION,''),ifnull(CREATE_TIME,''), ifnull(UPDATE_TIME,'')) from information_schema.TABLES where TABLE_SCHEMA not in ('mysql','test','information_schema','performance_schema','sys');"
-
-
How to repeat:
-
Please refer to attached document.
-
-
table_definition_cache=10000
-
table_open_cache =10000
-
innodb_open_files=10000
-
open_files_limit=10000
-
-
run the sql query every second and record the memory growing from OS and the mysqld.
-
-
mysql -uroot -h127.0.0.1 -e "select concat_ws('|',ifnull(TABLE_SCHEMA,''),ifnull(TABLE_NAME,''),ifnull(ENGINE,''),ifnull(TABLE_ROWS,'0'),ifnull(DATA_LENGTH,'0'), ifnull(INDEX_LENGTH,'0'),ifnull(DATA_FREE,'0'), ifnull(TABLE_COLLATION,''),ifnull(CREATE_TIME,''), ifnull(UPDATE_TIME,'')) from information_schema.TABLES where TABLE_SCHEMA not in ('mysql','test','information_schema','performance_schema','sys');"
-
-
Suggested fix:
- No idea but the memory is growing.
日前,作者遇到一個疑似“記憶體”洩露的問題,一時找不頭緒,然後就從mysql的官方上找線索,發現了上面的bug(見上圖,bug id 86279 ),查詢information_schema下的tables表導致記憶體溢位。 經動手簡單測試,貌似還真有這回事。 同理,該schema下的其他的一下表,可能也存在這個問題。
對於表數量特別多的系統,可能更需要慎重。 但也無須驚慌,上面寫的重現現象是重複查詢,然後記憶體逐步增長,最終OOM.
以上資訊僅供各位朋友參考!!!
percona 5.7
- https://bugs.launchpad.net/percona-server/+bug/1693511 --performance佔用大量記憶體--10G左右穩定下來
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2150034/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 避免PHP-FPM記憶體洩漏導致記憶體耗盡PHP記憶體
- 可能會導致.NET記憶體洩露的8種行為記憶體洩露
- 記一次 vue 的非同步更新佇列導致記憶體洩漏Vue非同步佇列記憶體
- GCC8 編譯最佳化 BUG 導致的記憶體洩漏GC編譯記憶體
- 解決NSTimer迴圈引用導致記憶體洩漏的六種方法記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- android Handler導致的記憶體洩露Android記憶體洩露
- 記憶體洩漏的原因記憶體
- jvm 記憶體洩漏JVM記憶體
- Android 記憶體洩漏Android記憶體
- Java記憶體洩漏Java記憶體
- js記憶體洩漏JS記憶體
- Android記憶體洩漏Android記憶體
- Go坑:time.After可能導致的記憶體洩露問題分析Go記憶體洩露
- WebView引起的記憶體洩漏WebView記憶體
- valgrind 記憶體洩漏分析記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- Android中常見的記憶體洩漏Android記憶體
- .NET 記憶體洩漏的爭議記憶體
- Swift的ARC和記憶體洩漏Swift記憶體
- vue使用中的記憶體洩漏Vue記憶體
- Android中的記憶體洩漏模式Android記憶體模式
- [譯] Swift 中的記憶體洩漏Swift記憶體
- 記憶體洩漏除錯工具記憶體除錯
- ThreadLocal真會記憶體洩漏?thread記憶體
- Perfdog 玩轉記憶體洩漏記憶體
- .Net程式記憶體洩漏解析記憶體
- iOS檢測記憶體洩漏iOS記憶體
- Android記憶體洩漏場景Android記憶體
- ThreadLocal記憶體洩漏問題thread記憶體
- PHP 記憶體洩漏分析定位PHP記憶體
- JavaScript之記憶體洩漏【四】JavaScript記憶體
- 異常連線導致的記憶體洩漏排查記憶體
- 1.記憶體優化(一)記憶體洩漏記憶體優化
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 造成記憶體洩漏的操作有哪些?記憶體