色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 使用事件(Events)完成計(jì)劃任務(wù)

瀏覽:135日期:2023-10-02 15:57:50

事件可以指定單次或以一定的間隔執(zhí)行 SQL 代碼。通常是將復(fù)雜的 SQL 語句使用存儲(chǔ)過程封裝好,然后周期性地調(diào)用存儲(chǔ)過程完成一定的任務(wù)。

事件無需建立服務(wù)端連接,而是通過一個(gè)獨(dú)立的事件調(diào)度器線程完成初始化。事件沒有輸入?yún)?shù)也沒有返回值,這是因?yàn)闆]有連接也就不存在輸入和輸出了。啟用后,可以通過服務(wù)端日志查看執(zhí)行的指令,但是很難知道具體來自哪個(gè)事件。也可以查詢 INFORMATION_SCHEMA.EVENTS 表了解事件的狀態(tài),例如最近一次執(zhí)行的時(shí)間。

與存儲(chǔ)過程類似,事件也需要考慮類似的問題。首先,事件增加了 MySQL 服務(wù)端額外的工作。雖然事件本身的負(fù)荷很小,但是事件調(diào)用的 SQL 語句可能對性能產(chǎn)生嚴(yán)重的影響。另外,事件也會(huì)有存儲(chǔ)過程那樣基于語句的復(fù)制帶來的那一類問題。事件比較好的應(yīng)用是做諸如周期性的維護(hù)任務(wù)、重建緩存、數(shù)據(jù)統(tǒng)計(jì)、保存監(jiān)測和診斷的狀態(tài)值等任務(wù)。

下面的例子創(chuàng)建了一個(gè)事件,調(diào)用存儲(chǔ)過程每周對指定的數(shù)據(jù)庫運(yùn)行數(shù)據(jù)表優(yōu)化:

CREATE EVENT optimize_somedb ON SCHEDULE EVERY 1 WEEKDO CALL optimize_tables(’somedb’);

可以指定事件是否需要重復(fù)執(zhí)行。在某些情況下是沒問題的,但是有些情況則不行。以上面的例子為例,你也許是想在所有的副本上運(yùn)行 OPTIMIZE TABLE 指令。但是,需要知道的是如果是全部副本都同時(shí)執(zhí)行這個(gè)操作的話,這會(huì)影響整個(gè)服務(wù)端性能(例如鎖表)。 而且,周期性事件可能會(huì)花很長事件才能完成,甚至有可能下一個(gè)事件還沒結(jié)束新的事件就又開始執(zhí)行了。MySQL 不會(huì)阻止這樣的情況,因此需要自己寫代碼實(shí)現(xiàn)相同任務(wù)的互斥??梢允褂眉渔i的方式達(dá)到這一目的:

CREATE EVENT optimize_somedb ON SCHEDULE EVERY 1 WEEKDO BEGINDECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; IF GET_LOCK(’somedb’, 0) THEN DO CALL optimize_tables(’some_db’); END IF; DO RELEASE_LOCK(’somedb’);END

看起來“多余”的 continue handler 可以保證即便是發(fā)生了異常也會(huì)釋放鎖。

雖然事件與連接無關(guān),但是卻是與線程有關(guān)的。MySQL 服務(wù)端有一個(gè)主事件調(diào)度線程,可以通過在服務(wù)端配置中開啟:

SET GLOBAL event_handler := 1;

一旦啟用,這個(gè)線程會(huì)執(zhí)行指定調(diào)度的事件。可以通過查看服務(wù)端的錯(cuò)誤日志來了解事件執(zhí)行的信息。

雖然事件調(diào)度器是單線程的,但是事件本身是可以并發(fā)執(zhí)行的。每次事件執(zhí)行的時(shí)候服務(wù)端會(huì)創(chuàng)建新的進(jìn)程。在事件內(nèi)部,可以調(diào)用 CONNECTION_ID()獲取一個(gè)唯一的值(雖然實(shí)際沒有連接),實(shí)際返回的就是線程 id。進(jìn)程和線程在事件執(zhí)行完后會(huì)銷毀??梢酝ㄟ^ SHOW PROCESSLIST 查看,在 Command 列中會(huì)顯示為 Connect。

雖然,進(jìn)程創(chuàng)建了實(shí)際執(zhí)行事件的線程,但線程在事件完成后會(huì)銷毀,并不會(huì)放入緩存中,因此 Threads_created 這個(gè)狀態(tài)計(jì)數(shù)器并不會(huì)看到增加。

結(jié)語:事件與應(yīng)用程序、或操作系統(tǒng)級(jí)的定時(shí)任務(wù)相比,由于沒有了 SQL 連接建立的過程,因此效率會(huì)更高,而且開銷不大。適用于需要周期性運(yùn)行的 SQL 腳本任務(wù),例如數(shù)據(jù)表優(yōu)化、生成統(tǒng)計(jì)報(bào)表數(shù)據(jù)等等。但是,需要注意,事件本身可能存在并發(fā)問題,這個(gè)可以通過加鎖解決。同時(shí),如果事件需要重復(fù)執(zhí)行,最好是不要執(zhí)行過于復(fù)雜耗時(shí)的任務(wù)。

以上就是MySQL 使用事件(Events)完成計(jì)劃任務(wù)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 用事件完成計(jì)劃任務(wù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 日本亚欧乱色视频在线网站 | 久艹视频在线观看 | 成人在线观看国产 | 美女视频黄在线观看 | 久久久久久免费一区二区三区 | 久久精品久久久久 | 亚洲天堂网视频 | 瑟瑟网站在线观看 | 亚洲国产中文字幕 | 午夜香蕉成视频人网站高清版 | 欧美成人aa| 国产99久久九九精品免费 | 91一级片 | 三级黄a| 国产精品一区二区久久精品 | 一级特黄aa大片欧美网站 | 国内美女福利视频在线观看网站 | 成年女人免费视频播放成年m | 94欧美setu| 日韩日韩日韩手机看片自拍 | 99在线视频免费 | 日韩欧美高清在线 | 二级毛片在线播放 | 亚洲欧美综合国产精品一区 | 成人性生片全套 | 男女视频免费 | 精品少妇一区二区三区视频 | 亚洲日本在线看片 | 久久精品国内偷自一区 | 亚洲欧美在线视频免费 | 久久精品国产欧美日韩亚洲 | 国产精品福利视频萌白酱 | 亚洲综合久久久久久中文字幕 | 精品久久久久久综合网 | 毛片在线高清免费观看 | 亚洲精品久久久久中文字幕一区 | 久久88香港三级台湾三级中文 | 日韩欧美亚洲国产 | 521av香蕉 | 国产免费一级精品视频 | 在线免费观看一级片 |