精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何解決由觸發器導致 MySQL 內存溢出?

數據庫 MySQL
根據官方的解釋可以了解到,如果有許多大的觸發器,參數 table_open_cache_instances 的默認值可能會造成內存使用過多。比如 table_open_cache_instances 設置為 16,那么表緩存會劃分為 16 個 table instance。當并發訪問大時,最多的情況下一個表的緩存信息會出現在每一個 table instance 里面。

作者:龔唐杰,愛可生 DBA 團隊成員,主要負責 MySQL 技術支持,擅長 MySQL、PG、國產數據庫。

1問題現象

一臺從庫服務器的內存使用率持續上升,最終導致 MySQL 服務被 kill 了。

內存監控視圖如下:

圖片圖片

內存使用率 92.76%

從圖中可以看出,在 00:00 左右觸發了 kill,然后又被 mysqld_safe 進程拉起,然后內存又會持續上升。

2排查過程

基本信息

  • 數據庫版本:MySQL 5.7.32
  • 操作系統版本:Ubuntu 20.04
  • 主機配置:8C64GB
  • innodb_buffer_pool_size:8G

由于用戶環境未打開內存相關的監控,所以在 my.cnf 配置文件中配置如下:

performance-schema-instrument = 'memory/% = COUNTED'

打開內存監控等待運行一段時間后,相關視圖查詢如下:

圖片圖片

圖片圖片

從上述截圖可以看到,MySQL 的 buffer pool 大小分配正常,但是 memory/sql/sp_head::main_mem_root 占用了 8GB 內存。

查看 源代碼[1] 的介紹:

圖片圖片

sp_head:sp_head represents one instance of a stored program.It might be of any type (stored procedure, function, trigger, event).

根據源碼的描述可知,sp_head 表示一個存儲程序的實例,該實例可能是存儲過程、函數、觸發器或者定時任務。

查詢當前環境存儲過程與觸發器數量:

圖片圖片

圖片圖片

當前環境存在大量的觸發器與存儲過程。

查詢 MySQL 相關 bug[2],這里面提到一句話:

圖片圖片

Tried to tweak table_open_cache_instances to affect this?

查詢此參數描述:

圖片圖片

A value of 8 or 16 is recommended on systems that routinely use 16 or more cores. However, if you have many large triggers on your tables that cause a high memory load, the default setting for table_open_cache_instances might lead to excessive memory usage. In that situation, it can be helpful to set table_open_cache_instances to 1 in order to restrict memory usage.

根據官方的解釋可以了解到,如果有許多大的觸發器,參數 table_open_cache_instances 的默認值可能會造成內存使用過多。

比如 table_open_cache_instances 設置為 16,那么表緩存會劃分為 16 個 table instance。當并發訪問大時,最多的情況下一個表的緩存信息會出現在每一個 table instance

再有每次將表信息放入表緩存時,所有關聯的觸發器都被放入 memory/sql/sp_head::main_mem_root 中,table_open_cache_instances 設置的越大其所占內存也就越大,以及存儲過程也會消耗更多的內存,所以導致內存一直上升最終導致 OOM。

下面簡單驗證一下觸發器對內存的影響。

當 table_open_cache_instances 為 8 時:
#清空緩存

mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

[root@test ~]# cat test.sh
for i in `seq 1 1 8`
do
mysql -uroot -p test -e "select * from test;"
done

[root@test ~]# sh test.sh

mysql> show variables like '%table_open_cache_instances%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| table_open_cache_instances | 8 |
+----------------------------+-------+
1 row in set (0.00 sec)

mysql> SELECT current_alloc FROM sys.memory_global_by_current_bytes WHERE event_name='memory/sql/sp_head::main_mem_root';
+---------------+
| current_alloc |
+---------------+
| 119.61 KiB |
+---------------+
1 row in set (0.00 sec)

在該表上創建一個觸發器。

mysql> \d|
mysql> CREATE TRIGGER trigger_test BEFORE INSERT ON test FOR EACH ROW BEGIN SIGNAL SQLSTATE '45000' SET message_text='Very long string. MySQL stores table descriptors in a special memory buffer, calle
'> at holds how many table descriptors MySQL should store in the cache and table_open_cache_instances t
'> hat stores the number of the table cache instances. So with default values of table_open_cache=4000
'> and table_open_cache_instances=16, you will have 16 independent memory buffers that will store 250 t
'> able descriptors each. These table cache instances could be accessed concurrently, allowing DML to u
'> se cached table descriptors without locking each other. If you use only tables, the table cache doe
'> s not require a lot of memory, because descriptors are lightweight, and even if you significantly increased the value of table_open_cache, it would not be so high. For example, 4000 tables will take u
'> p to 4000 x 4K = 16MB in the cache, 100.000 tables will take up to 390MB that is also not quite a hu
'> ge number for this number of open tables. However, if your tables have triggers, it changes the gam
'> e.'; END|
Query OK, 0 rows affected (0.00 sec)

#清空緩存

mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

然后訪問表,查看緩存。

[root@test ~]# cat test.sh
for i in `seq 1 1 8`
do
mysql -uroot -p test -e "select * from test;"
done

[root@test ~]# sh test.sh

mysql> SELECT current_alloc FROM sys.memory_global_by_current_bytes WHERE event_name='memory/sql/sp_head::main_mem_root';
+---------------+
| current_alloc |
+---------------+
| 438.98 KiB |
+---------------+
1 row in set (0.00 sec)

可以發現 memory/sql/sp_head::main_mem_root 明顯增長較大。如果有很多大的觸發器,那么所占內存就不可忽視(現場環境觸發器里面很多是調用了存儲過程)。

當 table_open_cache_instances 為 1 時:
mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%table_open_cache_instances%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| table_open_cache_instances | 1 |
+----------------------------+-------+
1 row in set (0.00 sec)

SELECT current_alloc FROM sys.memory_global_by_current_bytes WHERE event_name='memory/sql/sp_head::main_mem_root';
+---------------+
| current_alloc |
+---------------+
| 119.61 KiB |
+---------------+
1 row in set (0.00 sec)

mysql> #訪問表

mysql> system sh test.sh

mysql> SELECT current_alloc FROM sys.memory_global_by_current_bytes WHERE event_name='memory/sql/sp_head::main_mem_root';
+---------------+
| current_alloc |
+---------------+
| 159.53 KiB |
+---------------+
1 row in set (0.00 sec)

可以發現 memory/sql/sp_head::main_mem_root 所占內存增長較小。

由于大量觸發器會導致表緩存和 memory/sql/sp_head::main_mem_root 占用更多的內存,根據實際環境,嘗試把該從庫的 table_open_cache_instances 修改為 1 后觀察情況。

圖片圖片

可以看到內存值趨于穩定,未再次出現內存使用率異常的問題。

3總結

  1. MySQL 中不推薦使用大量的觸發器以及復雜的存儲過程。
  2. table_open_cache_instances 設置為 1 時,在高并發下會影響 SQL 的執行效率。本案例的從庫并發量不高,其他場景請根據實際情況進行調整。
  3. 觸發器越多會導致 memory/sql/sp_head::main_mem_root 占用的內存越大,存儲過程所使用的內存也會越大。
  4. 本文只是給出了解決內存溢出的一個方向,具體的底層原理請自行探索。

參考資料

[1]sp_head: https://dev.mysql.com/doc/dev/mysql-server/latest/classsp__head.html#details

[2]86821: https://bugs.mysql.com/bug.php?id=86821

本文關鍵字:#MySQL# #內存# #觸發器# #OOM#

關于 SQLE

SQLE 是一款全方位的 SQL 質量管理平臺,覆蓋開發至生產環境的 SQL 審核和管理。支持主流的開源、商業、國產數據庫,為開發和運維提供流程自動化能力,提升上線效率,提高數據質量。

責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2024-09-09 09:41:03

內存溢出golang開發者

2010-05-18 15:58:39

MySQL觸發器

2010-10-12 10:10:55

mysql觸發器

2024-10-24 16:51:08

2011-05-20 14:06:25

Oracle觸發器

2010-10-12 10:04:15

MySQL觸發器

2010-05-31 18:06:07

MySQL 觸發器

2010-10-12 10:24:58

mysql觸發器

2021-07-30 10:33:57

MySQL觸發器數據

2010-05-18 15:36:44

MySQL觸發器

2010-10-11 14:52:43

Mysql觸發器

2010-05-26 17:57:44

MySQL 觸發器

2013-06-26 16:14:26

Android加載圖片內存溢出

2010-10-12 10:38:29

mysql觸發器

2010-10-12 09:41:26

mysql觸發器

2011-03-28 10:05:57

sql觸發器代碼

2009-09-18 14:31:33

CLR觸發器

2023-06-11 16:09:49

觸發器MySQL

2010-06-04 14:32:34

MySQL 觸發器in

2010-05-18 14:35:06

MySQL觸發器
點贊
收藏

51CTO技術棧公眾號

一区二区三区欧美在线| 欧美一区二区三区免费观看| 我要看一级黄色大片| 成人免费网址| 99久久99精品久久久久久| 91福利视频网| 99久久久免费精品| 精品国内亚洲2022精品成人| 色哟哟一区二区在线观看| 制服诱惑一区| 日本一二三区在线视频| 久久99精品久久久| 2019中文字幕在线观看| 国产精品精品软件男同| 久久悠悠精品综合网| 欧美三级资源在线| 免费 成 人 黄 色| 麻豆电影在线播放| 久久免费电影网| 成人免费网站在线| 亚洲精品中文字幕乱码三区91| 免费成人结看片| 精品国产91乱码一区二区三区| 无遮挡又爽又刺激的视频| 青春草视频在线| 国产精品丝袜一区| 久久久久资源| 性猛交富婆╳xxx乱大交天津| 噜噜噜91成人网| 欧美国产日本在线| 91精品少妇一区二区三区蜜桃臀| 欧洲杯足球赛直播| 日韩av一区在线| 污污免费在线观看| 免费欧美网站| 4438x亚洲最大成人网| 激情婷婷综合网| 国产不卡人人| 亚洲成人一区二区在线观看| av不卡在线免费观看| 1pondo在线播放免费| 久久久亚洲欧洲日产国码αv| 国产精品免费视频一区二区| av免费观看网址| 国内精品伊人久久久久影院对白| 国产精品美女久久久久av超清| 欧美日韩综合在线观看| 日韩视频二区| 91精品成人久久| 国产乡下妇女做爰| 亚洲承认在线| 久久久久在线观看| 日本少妇久久久| 在线亚洲国产精品网站| 97av在线播放| 精品免费囯产一区二区三区| 亚洲久久成人| 欧洲日韩成人av| 台湾佬中文在线| 久久国产直播| 国产精品美乳一区二区免费| 少妇一级淫片日本| 久久超碰97人人做人人爱| 91精品国产综合久久久久久蜜臀 | 东京干手机福利视频| 国产精品香蕉一区二区三区| 91国产丝袜在线放| 色综合免费视频| 99re这里都是精品| 欧美高清性xxxxhd| 日本在线观看| 亚洲一级片在线观看| 成年人视频观看| 欧美xxxx做受欧美护士| 欧美日韩色综合| 在线观看网站黄| 欧美freesex8一10精品| 亚洲人成网站999久久久综合| 69精品无码成人久久久久久| 婷婷综合五月| 97免费视频在线播放| 7799精品视频天天看| 麻豆国产精品一区二区三区 | 日本一道高清一区二区三区| 亚洲老头同性xxxxx| 人妻熟人中文字幕一区二区| 久久精品国内一区二区三区水蜜桃| 欧美巨乳在线观看| 好看的av在线| 国产麻豆午夜三级精品| 久久大香伊蕉在人线观看热2| 国产在线观看网站| 亚洲欧美日韩一区二区 | 美女视频黄a大片欧美| 91在线观看免费高清| 日本成人动漫在线观看| 欧美高清在线一区二区| 成人免费看片'免费看| 最新日韩三级| 日韩欧美国产三级| 亚洲一区二区自偷自拍| 国产字幕视频一区二区| 国产精品爱啪在线线免费观看| 国产美女三级无套内谢| www国产亚洲精品久久麻豆| 伊人情人网综合| 中老年在线免费视频| 欧美一级生活片| 亚洲ⅴ国产v天堂a无码二区| 亚洲国产午夜| 成人精品视频久久久久| 欧美精品a∨在线观看不卡| 亚洲欧美另类综合偷拍| 韩国日本美国免费毛片| 激情小说亚洲图片| 久热爱精品视频线路一| 手机av免费观看| 91性感美女视频| 狠狠噜天天噜日日噜| 日本欧美一区| 亚洲欧美精品在线| 日产欧产va高清| 丰满岳乱妇一区二区三区| 性高潮久久久久久久久| 国产精品粉嫩| 亚洲第一色在线| 在线免费观看亚洲视频| 青青青爽久久午夜综合久久午夜| 加勒比在线一区二区三区观看| 超碰在线免费播放| 欧美猛男gaygay网站| 亚洲码无人客一区二区三区| 中文精品在线| 色婷婷久久久久swag精品 | 图片区小说区国产精品视频| 999热精品视频| 日韩在线观看一区| 国产91九色视频| 日本福利午夜视频在线| 亚洲高清不卡在线| 欧美做受高潮中文字幕 | 午夜精品久久久久久久无码| 午夜久久av| 久久亚洲欧美日韩精品专区| 国产又粗又猛又黄又爽无遮挡| 国产精品私人自拍| 在线观看国产一级片| 色综合咪咪久久网| 91精品久久久久久久久青青| 色多多视频在线观看| 欧美日韩一二三| 182在线观看视频| 尤物视频在线看| 国产日韩欧美三区| 国产精华一区二区三区| а√天堂在线官网| 欧美精品在线视频| 国产精品视频一区二区三 | 色呦呦国产精品| 天天操天天舔天天射| 毛片一区二区三区| 玖玖精品在线视频| 中文字幕一区二区三区四区久久 | 高清久久久久久| 日韩黄色短视频| 亚洲尤物av| 国产精品美女视频网站| 国内外激情在线| 欧美www视频| 国产午夜性春猛交ⅹxxx| 久久品道一品道久久精品| 国产超碰在线播放| 亚洲区综合中文字幕日日| caoporen国产精品| 中文不卡1区2区3区| 中文字幕国产日韩| 亚洲经典一区二区三区| 欧美日韩中文在线| 18啪啪污污免费网站| 国产精品99久久久久久久vr| 久久国产午夜精品理论片最新版本| 免费观看久久av| 亚洲一区制服诱惑| 午夜影院一区| 久久激情五月丁香伊人| 六月丁香综合网| 欧美吻胸吃奶大尺度电影| 国产一区二区视频在线观看免费| 不卡一区中文字幕| 亚洲视频第二页| 99精品视频免费观看| 日韩欧美视频一区二区| 我要色综合中文字幕| 国产精品久久久久av| 青春草视频在线| 色老头一区二区三区| 好男人www在线视频| 欧美日韩一区二区三区在线看| 久久久国产成人| 日本一区二区三级电影在线观看 | 海角国产乱辈乱精品视频| 国产理论电影在线观看| 精品欧美一区二区三区精品久久| 91porny九色| 亚洲午夜影视影院在线观看| 国产无遮挡在线观看| caoporm超碰国产精品| 日韩高清第一页| 天堂成人免费av电影一区| 男人天堂新网址| 99久久精品网| 日韩视频精品| 综合干狼人综合首页| 成人动漫视频在线观看完整版| 国产三级一区| 国产成人欧美在线观看| h片在线观看下载| 久久国产精品久久精品| www视频在线观看免费| 日韩电影大全免费观看2023年上| 国产情侣自拍小视频| 欧美日韩久久久久久| 一级黄色大片视频| 欧美日韩亚洲精品内裤| 国产精品第九页| 亚洲老妇xxxxxx| 老司机成人免费视频| 国产欧美1区2区3区| 手机免费看av| 91视频91自| 国产 中文 字幕 日韩 在线| 成人午夜视频免费看| 国产成人精品综合久久久久99| 久久国产精品72免费观看| 啊啊啊国产视频| 日韩电影在线免费| 国产精品99久久免费黑人人妻| 亚洲欧美视频| 妺妺窝人体色www在线小说| 亚洲激情网址| 久久久亚洲国产精品| 亚洲视频一区| 成人一区二区免费视频| 99精品99| 37pao成人国产永久免费视频| 日韩视频在线一区二区三区| 99视频在线免费播放| 中文日韩欧美| 国产一级片黄色| 日本成人超碰在线观看| 亚洲综合婷婷久久| 久久er99热精品一区二区| 污污的视频免费观看| 国内成+人亚洲+欧美+综合在线| 国产精品嫩草影院8vv8| 国产乱码精品一品二品| 女性生殖扒开酷刑vk| 99国产精品国产精品毛片| 少妇精品一区二区三区| 国产色综合久久| 韩国一级黄色录像| 亚洲欧美色综合| 亚洲国产成人精品激情在线| 日本韩国精品在线| 一区二区视频在线免费观看| 777xxx欧美| 国产综合无码一区二区色蜜蜜| 亚洲国产婷婷香蕉久久久久久 | 精品视频国内| 国产一区二区高清不卡| 欧美人与牛zoz0性行为| 一区二区三区四区五区精品 | 韩国三级电影久久久久久| 日本乱码一区二区三区不卡| 国产精品高潮粉嫩av| 欧美高清xxx| 国产高清精品一区二区三区| 亚欧洲精品视频在线观看| 亚洲蜜桃av| 99精品久久| www.超碰97.com| 成人av在线观| 你懂得视频在线观看| 亚洲精品中文在线观看| 69成人免费视频| 91精品国产91综合久久蜜臀| 蜜桃久久一区二区三区| 国产一区二区久久精品| 污污片在线免费视频| 欧美中文在线观看| 日韩在线激情| 噜噜噜噜噜久久久久久91| 外国成人激情视频| 亚洲熟妇av一区二区三区漫画| 蜜臀av在线播放一区二区三区| 黑人巨大猛交丰满少妇| 国产婷婷一区二区| 久久久www成人免费毛片| 欧美日韩一区二区三区在线看| 国产小视频一区| 精品国产一区av| 亚洲欧洲美洲av| 亚洲xxxxx| 国产欧美一区| 秋霞无码一区二区| 激情综合亚洲精品| 国产又大又粗又爽的毛片| 一区二区三区中文字幕| 中文字幕人妻互换av久久| 亚洲国模精品一区| 亚洲第一图区| 国产欧美亚洲精品| 国产精品一国产精品| 97在线国产视频| 国产成人在线看| 麻豆天美蜜桃91| 欧美午夜理伦三级在线观看| 色噜噜一区二区三区| 麻豆成人在线看| 亚洲欧美专区| 亚洲综合视频一区| 日韩电影免费一区| 黄色工厂在线观看| 午夜精品aaa| 亚洲免费国产视频| 欧美裸体xxxx极品少妇| 精品国产亚洲一区二区三区大结局| 午夜欧美一区二区三区免费观看| 男人天堂欧美日韩| 影音先锋黄色资源| 亚洲福利电影网| 好吊色在线观看| 韩日欧美一区二区| 在线播放一区二区精品视频| 欧美一级黄色录像片| 激情综合网最新| 久久精品一区二区三区四区五区 | 婷婷开心激情网| 国外成人性视频| 奇米影视777在线欧美电影观看| www.av91| av成人动漫在线观看| 日韩精品人妻中文字幕| 亚洲第一男人av| 天堂√中文最新版在线| 久久免费视频1| 午夜亚洲激情| 欧美性受xxxx黑人| 欧美日韩一二区| caopon在线免费视频| 99久久精品久久久久久ai换脸| 欧美成人有码| 视频免费在线观看| 欧美日韩另类视频| 欧美xxx.com| 国产精品久在线观看| 97欧美在线视频| 在线播放国产视频| 婷婷成人综合网| 国内精品在线视频| 国产精品偷伦一区二区| av资源久久| 亚洲精品在线视频播放| 亚洲激情五月婷婷| 天堂在线视频免费| 国产精品对白刺激| 亚洲国产一区二区三区在线播放| 国产裸体视频网站| 精品成人在线视频| 99青草视频在线播放视| 亚洲一区二区三区毛片| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产精品九九视频| 在线免费不卡视频| 成人看av片| 欧美不卡福利| 国产在线精品不卡| 国产系列精品av| 色久欧美在线视频观看| 97超碰成人| 天天插天天操天天射| 亚洲精品伦理在线| 免费a级毛片在线观看| 国产在线视频2019最新视频| 好看不卡的中文字幕| 国产高清一区二区三区四区| 91麻豆精品久久久久蜜臀| 韩国精品一区| 艳母动漫在线免费观看| 91网址在线看| 国产偷拍一区二区| 青青久久av北条麻妃海外网| 久久中文字幕av| 免费成人深夜夜行p站| 欧美久久久久久蜜桃| 亚洲黄色网址| 999久久欧美人妻一区二区| 国产日韩欧美不卡| 国模无码一区二区三区| 国产美女精品视频|