最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年05月24日 09:55:01   作者:島上碼農(nóng)  
事件(Events) 是在 MySQL 5.1后引入的,有點(diǎn)類似操作系統(tǒng)的計(jì)劃任務(wù)(cron),但是周期性任務(wù)是內(nèi)置在 MySQL 服務(wù)端執(zhí)行的。本文講述MySQL如何用事件完成計(jì)劃任務(wù)

事件可以指定單次或以一定的間隔執(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 語句可能對(duì)性能產(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ǔ)過程每周對(duì)指定的數(shù)據(jù)庫運(yùn)行數(shù)據(jù)表優(yōu)化:

CREATE EVENT optimize_somedb ON SCHEDULE EVERY 1 WEEK
DO 
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 WEEK
DO 
BEGIN
	DECLARE 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ù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    mysql中如何重命名數(shù)據(jù)庫?這篇文章主要介紹了安全快速修改Mysql數(shù)據(jù)庫名的5種方法,需要的朋友可以參考下
    2014-04-04
  • 一鍵搭建MYSQL主從,輕松應(yīng)對(duì)數(shù)據(jù)備份與恢復(fù)

    一鍵搭建MYSQL主從,輕松應(yīng)對(duì)數(shù)據(jù)備份與恢復(fù)

    MYSQL主從是一種常見的數(shù)據(jù)庫架構(gòu),它可以提高數(shù)據(jù)庫的可用性和性能,在主從架構(gòu)中,主數(shù)據(jù)庫負(fù)責(zé)處理寫操作,而從數(shù)據(jù)庫負(fù)責(zé)處理讀操作,當(dāng)主數(shù)據(jù)庫發(fā)生故障時(shí),從數(shù)據(jù)庫可以接管并繼續(xù)提供服務(wù),從而實(shí)現(xiàn)高可用性,需要的朋友可以參考下
    2023-10-10
  • MySQL Server 8.0.13.0 安裝教程圖文詳解

    MySQL Server 8.0.13.0 安裝教程圖文詳解

    本文通過圖文并茂的形式給大家介紹了MySQL Server 8.0.13.0 安裝教程 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Mysql中使用sql語句生成雪花算法Id

    Mysql中使用sql語句生成雪花算法Id

    雪花算法是一種生成全局唯一ID的分布式算法,本文主要介紹了Mysql中使用sql語句生成雪花算法Id,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • 多種不同的 MySQL 的 SSL 配置

    多種不同的 MySQL 的 SSL 配置

    MySQL 只支持 TLS v1.0,默認(rèn)不支持主機(jī)名驗(yàn)證,所以你的證書可能是給db1.example.com的,也可能是給db2.example的,瀏覽器則可能會(huì)用OCSP、CRL's 或 CRLsets 來驗(yàn)證證書是否有效。 MySQL 5.6以后就只支持CRL驗(yàn)證。
    2016-04-04
  • php后臺(tái)經(jīng)常提示無法連接mysql 刷新后又可以訪問的解決方法

    php后臺(tái)經(jīng)常提示無法連接mysql 刷新后又可以訪問的解決方法

    這幾天有一臺(tái)MySQL數(shù)據(jù)庫服務(wù)器出現(xiàn)了頻繁的掉線情況,通過排查,并沒有排查出哪個(gè)網(wǎng)站被攻擊,百思不得其解中的時(shí)候,群里有個(gè)朋友說是因?yàn)槲④汯B967723造成的,網(wǎng)上搜索了一下,果然很多人都是這樣的問題,都是windows系統(tǒng)下安裝的MySQL造成的
    2011-05-05
  • DBeaver連接MySQL的超詳細(xì)步驟

    DBeaver連接MySQL的超詳細(xì)步驟

    DBeaver是免費(fèi)、開源、通用數(shù)據(jù)庫工具,是許多開發(fā)開發(fā)人員和數(shù)據(jù)庫管理員的所選,下面這篇文章主要給大家介紹了關(guān)于DBeaver連接MySQL的超詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • mysql數(shù)據(jù)庫備份及恢復(fù)命令 mysqldump,source的用法

    mysql數(shù)據(jù)庫備份及恢復(fù)命令 mysqldump,source的用法

    mysql數(shù)據(jù)庫備份及恢復(fù)命令 mysqldump,source的用法,需要的朋友可以參考下。
    2011-02-02
  • MySQL緩存的查詢和清除命令詳細(xì)操作指南

    MySQL緩存的查詢和清除命令詳細(xì)操作指南

    MySQL緩存機(jī)制是提升數(shù)據(jù)庫查詢性能的關(guān)鍵技術(shù),本文深入介紹了MySQL的查詢緩存、表緩存和InnoDB緩沖池等緩存類型,以及它們的查詢和清除命令,需要的朋友可以參考下
    2024-09-09
  • MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn)

    MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn)

    count()是SQL中一個(gè)常用的聚合函數(shù),其被用來統(tǒng)計(jì)記錄的總數(shù),本文主要介紹了MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09

最新評(píng)論

元阳县| 大邑县| 定襄县| 张家川| 桦川县| 瑞安市| 红河县| 原阳县| 马公市| 普兰店市| 郸城县| 锡林郭勒盟| 西乌珠穆沁旗| 微山县| 漳浦县| 连江县| 鄂托克旗| 南开区| 来安县| 白朗县| 阿合奇县| 潮州市| 南宫市| 读书| 安达市| 柳河县| 敦煌市| 巴彦淖尔市| 股票| 昭觉县| 辽中县| 上高县| 运城市| 嘉荫县| 山西省| 台东市| 荔波县| 泸水县| 桐庐县| 抚顺市| 出国|