日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL-性能优化_大表和大事务的常用处理方案

發(fā)布時(shí)間:2025/3/21 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL-性能优化_大表和大事务的常用处理方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 生猛干貨
  • 官方文檔
  • 影響MySQL性能的幾大因素
  • 大表帶來(lái)的風(fēng)險(xiǎn)
    • 大表的定義
    • 大表帶來(lái)的風(fēng)險(xiǎn)
    • 如何應(yīng)對(duì)大表?
  • 大事務(wù)帶來(lái)的風(fēng)險(xiǎn)
    • 基本特性:ACID
    • SQL標(biāo)準(zhǔn)中的4個(gè)隔離級(jí)別
    • Read Committed (不可重復(fù)讀) VS Repeatable Read (可重復(fù)讀) VS Read UnCommitted(臟讀)
    • 總結(jié)下不同隔離級(jí)別的缺點(diǎn)
    • MySQL修改隔離級(jí)別的方法
    • MySql 的autoCommit設(shè)置
    • 大事務(wù)的定義
    • 大事務(wù)的潛在風(fēng)險(xiǎn)
    • 如何處理大事務(wù)
  • 搞定MySQL

生猛干貨

帶你搞定MySQL實(shí)戰(zhàn),輕松對(duì)應(yīng)海量業(yè)務(wù)處理及高并發(fā)需求,從容應(yīng)對(duì)大場(chǎng)面試


官方文檔

https://dev.mysql.com/doc/

如果英文不好的話,可以參考 searchdoc 翻譯的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html


影響MySQL性能的幾大因素

通常來(lái)說(shuō) ,有以下幾點(diǎn)

慢SQL(重點(diǎn)) 、 主機(jī)的硬件資源(CPU、內(nèi)存、磁盤(pán)I/O等)、網(wǎng)卡流量等等


  • 超高的QPS和 TPS

    QPS(Queries Per Second 每秒處理的查詢量) : 假設(shè)處理一個(gè)SQL 需要 10ms , 1s 最多也就處理100個(gè),那么QPS < = 100 ,如果 100ms處理一個(gè)呢? 那 QPS <=10 ,可以推斷出SQL的執(zhí)行效率隊(duì)QPS的影響很重要。 一般來(lái)說(shuō),80%的數(shù)據(jù)庫(kù)問(wèn)題都可以通過(guò)SQL優(yōu)化來(lái)解決。

    TPS(Transactions Per Second,事務(wù)數(shù)/秒,這個(gè)完整的事務(wù)包括了用戶請(qǐng)求服務(wù)器,服務(wù)器內(nèi)部處理,服務(wù)器返回信息給用戶三個(gè)過(guò)程)

    QPS和TPS高,說(shuō)明應(yīng)用的負(fù)載較高.

    MySQL數(shù)據(jù)庫(kù)中的QPS和TPS的計(jì)算方法

    Questions = SHOW GLOBAL STATUS LIKE 'Questions'; Uptime = SHOW GLOBAL STATUS LIKE 'Uptime'; QPS=Questions/Uptime-----------------------Com_commit = SHOW GLOBAL STATUS LIKE 'Com_commit'; Com_rollback = SHOW GLOBAL STATUS LIKE 'Com_rollback'; Uptime = SHOW GLOBAL STATUS LIKE 'Uptime'; TPS=(Com_commit + Com_rollback)/Uptime

  • 高并發(fā)和高CPU使用率

    高并發(fā)–>數(shù)據(jù)庫(kù)連接池被用光的幾率大增 (max_connections默認(rèn)100),超過(guò)的話,就會(huì)看到500子類的錯(cuò)誤了

    高CPU使用率—>響應(yīng)慢,甚至導(dǎo)致宕機(jī)


  • 磁盤(pán)I/O

    磁盤(pán)I/O的性能突然下降—>使用更快的磁盤(pán)設(shè)備

    其他大量消耗磁盤(pán)性能的計(jì)劃任務(wù)等 —> 可預(yù)期的高峰期,調(diào)整計(jì)劃任務(wù)的執(zhí)行時(shí)間


  • 網(wǎng)卡流量

    比如我們常說(shuō)的千兆網(wǎng)卡, 這里的千兆 其實(shí)是 小b , 1Byte = 8 bit . bit 小b Byte 大B

    1000Mb / 8 約等于 100MB (我們熟悉的帶寬)

    網(wǎng)卡被占滿的風(fēng)險(xiǎn)增加 ,被占滿的話,肯定訪問(wèn)不到數(shù)據(jù)庫(kù)了 ,如何避免呢?

    通常來(lái)說(shuō),

    1. 減少slave節(jié)點(diǎn)的數(shù)量,避免大量的復(fù)制,占用帶寬
    2. 合理的使用多級(jí)緩存,避免大量緩存失效,請(qǐng)求到DB
    3. 避免使用 select * 查詢,占用帶寬傳輸
    3. 分離業(yè)務(wù)網(wǎng)絡(luò)和服務(wù)器網(wǎng)絡(luò)等等


大表帶來(lái)的風(fēng)險(xiǎn)

大表的定義

啥叫大表? 粗略的定義 ,可以從兩個(gè)維度去考慮,僅供參考

  • 記錄超過(guò)1千萬(wàn)
  • 表數(shù)據(jù)文件巨大,超過(guò)10G

  • 大表帶來(lái)的風(fēng)險(xiǎn)

    • 對(duì)查詢的影響

      舉個(gè)例子: 從超巨數(shù)據(jù)中,查找區(qū)分度不高的數(shù)據(jù),將導(dǎo)致大量的磁盤(pán)I/O,有可能導(dǎo)致數(shù)據(jù)庫(kù)hang死 ,從而產(chǎn)生大量的慢查詢,需要特別關(guān)注解決。

    • 對(duì)DDL的影響

      建立索引 耗時(shí)特別長(zhǎng), 風(fēng)險(xiǎn): MySQL 5.5 以前的版本,建立索引會(huì)鎖表 。 5.5以后的版本雖然不會(huì)引起鎖表,但會(huì)引起主從延遲。

      修改表結(jié)構(gòu)的話,需要長(zhǎng)時(shí)間鎖表 ,風(fēng)險(xiǎn):1. 主從延遲 2. 影響正常的數(shù)據(jù)操作


    如何應(yīng)對(duì)大表?

    • 1. 分庫(kù)分表 (分表主鍵如何選擇,分表后跨分區(qū)的查詢和統(tǒng)計(jì)如何解決) 慎重!!!
    • 2. 對(duì)歷史數(shù)據(jù)進(jìn)行歸檔 (歸檔時(shí)間點(diǎn)的選擇 、如何高效的歸檔)

    大事務(wù)帶來(lái)的風(fēng)險(xiǎn)

    基本特性:ACID

    事務(wù)的4個(gè)特性: ACID

    原子性 atomicity | 一致性 consistency | 隔離性 isolation | 持久性 durability

    • 原子性(atomicity)
      一個(gè)事務(wù)必須被視為一個(gè)不可分割的最小工作單元,整個(gè)事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾,對(duì)于一個(gè)事務(wù)來(lái)說(shuō),不可能只執(zhí)行其中的一部分操作,這就是事務(wù)的原子性。

      舉個(gè)例子: 轉(zhuǎn)賬 A 轉(zhuǎn)給B , A賬戶 扣減 2千, B賬戶 增加兩千 。 這兩個(gè)必須在一個(gè)事務(wù)中,有任何一步出現(xiàn)問(wèn)題,都不會(huì)提交,需要回滾, 否則的話,A扣了2000成功,B增加2000沒(méi)成功,錢(qián)就莫名其妙的少了,誰(shuí)能受得了?


    • 一致性 consistency

      一致性是指事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài),也就是說(shuō)一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。

      說(shuō)實(shí)話,這個(gè)定義太難懂了。。。。

      [1]Transactions are not a law of nature; they were created with a purpose, namely to simplify the programming model for applications accessing a database. By using transactions, the application is free to ignore certain potential error scenarios and concurrency issues, because the database takes care of them instead (we call these safety guarantees).

      上述說(shuō)出了為什么會(huì)出現(xiàn)事務(wù) : 事務(wù)的產(chǎn)生,其實(shí)是為了當(dāng)應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,事務(wù)能夠簡(jiǎn)化我們的編程模型,不需要我們?nèi)タ紤]各種各樣的潛在錯(cuò)誤和并發(fā)問(wèn)題。 因此事務(wù)本質(zhì)上是為了應(yīng)用層服務(wù)的。

      ACID里的AID都是數(shù)據(jù)庫(kù)的特征,也就是依賴數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn).而唯獨(dú)這個(gè)C,實(shí)際上它依賴于應(yīng)用層,也就是依賴于開(kāi)發(fā)者.

      一致性是指系統(tǒng)從一個(gè)正確的狀態(tài),遷移到另一個(gè)正確的狀態(tài).什么叫正確的狀態(tài)呢?就是當(dāng)前的狀態(tài)滿足預(yù)定的約束就叫做正確的狀態(tài).而事務(wù)具備ACID里C的特性是說(shuō)通過(guò)事務(wù)的AID來(lái)保證我們的一致性.

      CASE1: A要向B轉(zhuǎn)2000元,而A的賬戶中只有1800元,并且我們給定賬戶余額這一列的約束是,不能小于0.那么很明顯這條事務(wù)執(zhí)行會(huì)失敗,因?yàn)?800-2000=-200,小于我們給定的約束了. -----------------> 這個(gè)例子里,支付之前我們數(shù)據(jù)庫(kù)里的數(shù)據(jù)都是符合約束的,但是如果事務(wù)執(zhí)行成功了,我們的數(shù)據(jù)庫(kù)數(shù)據(jù)就破壞約束了,因此事務(wù)不能成功,這里我們說(shuō)事務(wù)提供了一致性的保證 .

      CASE2: A要向B支付2000元,而A的賬戶中只有1800元,我們的賬戶余額列沒(méi)有任何約束.但是我們業(yè)務(wù)上不允許賬戶余額小于0.因此支付完成后我們會(huì)檢查A的賬戶余額,發(fā)現(xiàn)余額小于0了,于是我們進(jìn)行了事務(wù)的回滾. -------------------> 這個(gè)例子里,如果事務(wù)執(zhí)行成功,雖然沒(méi)有破壞數(shù)據(jù)庫(kù)的約束,但是破壞了我們應(yīng)用層的約束.而事務(wù)的回滾保證了我們的約束,因此也可以說(shuō)事務(wù)提供了一致性保證. (事實(shí)上,是我們應(yīng)用層利用事務(wù)回滾保證了我們的約束不被破壞)

      CASE3: A要向B支付2000元,而A的賬戶中只有1800元,我們的賬戶余額列沒(méi)有任何約束.然后支付成功了.-------------------->這里,如果按照很多人的理解,事務(wù)不是保證一致性么?直觀上賬戶余額為什么能為負(fù)呢.但這里事務(wù)執(zhí)行前和執(zhí)行后,我們的系統(tǒng)沒(méi)有任何的約束被破壞.一直都是保持正確的狀態(tài).

    所以,綜上.我們可以理解一致性就是:應(yīng)用系統(tǒng)從一個(gè)正確的狀態(tài)到另一個(gè)正確的狀態(tài).而ACID就是說(shuō)事務(wù)能夠通過(guò)AID來(lái)保證這個(gè)C的過(guò)程.C是目的,AID都是手段.


    • 隔離性 isolation

      一個(gè)事務(wù)所做的修改在最終提交以前,對(duì)其他事務(wù)是不可見(jiàn)的。

      還是轉(zhuǎn)賬的例子 ,A轉(zhuǎn)賬給B,A扣減,B增加。 假設(shè)在A扣減完成,B未增加時(shí), 有另外一個(gè)事務(wù),統(tǒng)計(jì)A賬戶的余額 ,這個(gè)時(shí)候看到的應(yīng)該是A扣減前的金額。


    • 持久性 durability

    事務(wù)的操作,一旦提交,對(duì)于數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是永久性的,即使數(shù)據(jù)庫(kù)發(fā)生故障也不能丟失已提交事務(wù)所完成的改變。


    SQL標(biāo)準(zhǔn)中的4個(gè)隔離級(jí)別

    • Read UnCommitted 讀取未提交內(nèi)容

      在這個(gè)隔離級(jí)別,所有事務(wù)都可以“看到”未提交事務(wù)的執(zhí)行結(jié)果。在這種級(jí)別上,可能會(huì)產(chǎn)生很多問(wèn)題,除非用戶真的知道自己在做什么,并有很好的理由選擇這樣做。本隔離級(jí)別很少用于實(shí)際應(yīng)用,因?yàn)樗男阅芤膊槐仄渌阅芎枚嗌?#xff0c;而別的級(jí)別還有其他更多的優(yōu)點(diǎn)。讀取未提交數(shù)據(jù),也被稱為“臟讀”


    • Read Committed 讀取提交內(nèi)容 (oracle等大部分?jǐn)?shù)據(jù)庫(kù)的隔離級(jí)別)

      大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別(但是不是MySQL的默認(rèn)隔離級(jí)別),滿足了隔離的早先簡(jiǎn)單定義:一個(gè)事務(wù)開(kāi)始時(shí),只能“看見(jiàn)”已經(jīng)提交事務(wù)所做的改變,一個(gè)事務(wù)從開(kāi)始到提交前,所做的任何數(shù)據(jù)改變都是不可見(jiàn)的,除非已經(jīng)提交。

      這種隔離級(jí)別被稱為“不可重復(fù)讀”。這意味著用戶運(yùn)行同一個(gè)語(yǔ)句兩次,看到的結(jié)果是不同的。


    • Repeatable Read 可重復(fù)讀 (MySQL默認(rèn)的隔離級(jí)別

      MySQL數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別。該級(jí)別解決了READ UNCOMMITTED隔離級(jí)別導(dǎo)致的問(wèn)題。它保證同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取事務(wù)時(shí),會(huì)“看到同樣的”數(shù)據(jù)行。不過(guò),這會(huì)導(dǎo)致另外一個(gè)棘手問(wèn)題“幻讀”。InnoDB和Falcon存儲(chǔ)引擎通過(guò)多版本并發(fā)控制機(jī)制解決了幻讀問(wèn)題。

    • Serializable 可串行化

      該級(jí)別是最高級(jí)別的隔離級(jí)。它通過(guò)強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問(wèn)題。簡(jiǎn)而言之,SERIALIZABLE是在每個(gè)讀的數(shù)據(jù)行上加鎖。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)Timeout和鎖競(jìng)爭(zhēng)Lock Contention現(xiàn)象,實(shí)際應(yīng)用中很少使用到這個(gè)級(jí)別,但如果用戶的應(yīng)用為了數(shù)據(jù)的穩(wěn)定性,需要強(qiáng)制減少并發(fā)的話,也可以選擇這種隔離級(jí)


    Read Committed (不可重復(fù)讀) VS Repeatable Read (可重復(fù)讀) VS Read UnCommitted(臟讀)

    我們以MySQL數(shù)據(jù)庫(kù)為例子,對(duì)比下這兩種事務(wù)隔離級(jí)別對(duì)查詢數(shù)據(jù)的影響

    打開(kāi)兩個(gè)會(huì)話

    會(huì)話一 :

    # 連接mysql[root@artisan ~]# mysql -u root -p Enter password:................# 切到artisan數(shù)據(jù)庫(kù) mysql> use artisan; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -ADatabase changed mysql> desc t_test; # 查看t_test表結(jié)構(gòu) +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)mysql> select * from t_test; # 查詢數(shù)據(jù) +----+ | id | +----+ | 1 | | 3 | | 5 | | 7 | | 9 | +----+ 5 rows in set (0.00 sec)mysql> show variables like '%iso%' # 查看隔離級(jí)別 -> ; +-----------------------+-----------------+ | Variable_name | Value | +-----------------------+-----------------+ | transaction_isolation | REPEATABLE-READ | | tx_isolation | REPEATABLE-READ | +-----------------------+-----------------+ 2 rows in set (0.00 sec)mysql> begin; # 開(kāi)啟事務(wù) Query OK, 0 rows affected (0.00 sec)mysql> select * from t_test where id < 7; +----+ | id | +----+ | 1 | | 3 | | 5 | +----+ 3 rows in set (0.00 sec)mysql>

    然后 切到會(huì)話二 ,插入幾條數(shù)據(jù)

    [root@artisan ~]# mysql -u root -p Enter password: ..... ..... ..... mysql> use artisan; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -ADatabase changed mysql> select * from t_test; +----+ | id | +----+ | 1 | | 3 | | 5 | | 7 | | 9 | +----+ 5 rows in set (0.00 sec)mysql> begin ; # 開(kāi)啟事務(wù) Query OK, 0 rows affected (0.00 sec)mysql> insert into t_test values(2); #插入數(shù)據(jù) Query OK, 1 row affected (0.00 sec)mysql> commit; #提交事務(wù) Query OK, 0 rows affected (0.00 sec)mysql> select * from t_test; +----+ | id | +----+ | 1 | | 3 | | 5 | | 7 | | 9 | | 2 | +----+ 6 rows in set (0.00 sec)mysql>

    重新切回到 會(huì)話一,重復(fù)執(zhí)行剛才的SQL (此時(shí),會(huì)話一這個(gè)事務(wù)還未提交,還在事務(wù)中)

    可以看到,在 **REPEATABLE-READ (可重復(fù)讀)**這種隔離級(jí)別下, 事務(wù)一 在事務(wù)內(nèi),每次查詢到的數(shù)據(jù)都是一樣的,而且也無(wú)法讀取到事務(wù)二已經(jīng)提交的數(shù)據(jù)

    這也就理解了為啥叫 “可重復(fù)讀” : 因?yàn)?它保證同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取事務(wù)時(shí),會(huì)“看到同樣的”數(shù)據(jù)行

    那 這種事務(wù)級(jí)別潛在的問(wèn)題是啥呢 ? --------> 會(huì)導(dǎo)致另外一個(gè)棘手問(wèn)題“幻讀”。InnoDB和Falcon存儲(chǔ)引擎通過(guò)多版本并發(fā)控制機(jī)制解決了幻讀問(wèn)題。

    幻讀是事務(wù)非獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如事務(wù)T1批量對(duì)一個(gè)表中某一列列值為1的數(shù)據(jù)修改為2的變更,但是在這時(shí),事務(wù)T2對(duì)這張表插入了一條列值為1的數(shù)據(jù),并完成提交。此時(shí),如果事務(wù)T1查看剛剛完成操作的數(shù)據(jù),發(fā)現(xiàn)還有一條列值為1的數(shù)據(jù)沒(méi)有進(jìn)行修改,而這條數(shù)據(jù)其實(shí)是T2剛剛提交插入的,這就是幻讀


    我們修改下 MySQL的隔離級(jí)別為 read-committed

    我們把會(huì)話一的事務(wù)先提交了,然后修改下隔離級(jí)別

    mysql> commit ; Query OK, 0 rows affected (0.00 sec)mysql> set session tx_isolation='read-committed'; # 設(shè)置隔離級(jí)別 Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show variables like '%iso%' -> ; #查看隔離級(jí)別 +-----------------------+----------------+ | Variable_name | Value | +-----------------------+----------------+ | transaction_isolation | READ-COMMITTED | | tx_isolation | READ-COMMITTED | +-----------------------+----------------+ 2 rows in set (0.01 sec)mysql>

    然后切到會(huì)話二

    回切到會(huì)話一,重新查詢

    所以 READ-COMMITTED 又被稱為不可重復(fù)讀 ,因?yàn)閷?duì)于數(shù)據(jù)庫(kù)中的某個(gè)數(shù)據(jù),一個(gè)事務(wù)執(zhí)行過(guò)程中多次查詢返回不同查詢結(jié)果,這就是在事務(wù)執(zhí)行過(guò)程中,數(shù)據(jù)被其他事務(wù)提交修改了。 每次查詢都有可能查詢到其他事務(wù)修改過(guò)的數(shù)據(jù),所以稱為 不可重復(fù)讀。


    不可重復(fù)讀 VS 臟讀 VS 可重復(fù)讀

    • 不可重復(fù)讀同臟讀的區(qū)別在于,臟讀是一個(gè)事務(wù)讀取了另一未完成的事務(wù)執(zhí)行過(guò)程中的數(shù)據(jù),而不可重復(fù)讀是一個(gè)事務(wù)執(zhí)行過(guò)程中,另一事務(wù)提交并修改了當(dāng)前事務(wù)正在讀取的數(shù)據(jù)。
    • 幻讀和不可重復(fù)讀都是讀取了另一條已經(jīng)提交的事務(wù)(這點(diǎn)同臟讀不同),所不同的是不可重復(fù)讀查詢的都是同一個(gè)數(shù)據(jù)項(xiàng),而幻讀針對(duì)的是一批數(shù)據(jù)整體(比如數(shù)據(jù)的個(gè)數(shù))。


    總結(jié)下不同隔離級(jí)別的缺點(diǎn)

    隔離行由低到高 : Read UnCommitted —> Read Committed —> Repeatable Read -----> Serializable

    并發(fā)性由高到低 : Read UnCommitted —> Read Committed —> Repeatable Read -----> Serializable


    MySQL修改隔離級(jí)別的方法

    全局修改需要修改MySql的全局文件my.cnf (linux操作系統(tǒng))

    #可選參數(shù)有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ

    修改當(dāng)前會(huì)話Session的隔離級(jí)

    mysql> set session tx_isolation = 'REPEATABLE-READ'; Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show variables like '%iso%'-> ; +-----------------------+-----------------+ | Variable_name | Value | +-----------------------+-----------------+ | transaction_isolation | REPEATABLE-READ | | tx_isolation | REPEATABLE-READ | +-----------------------+-----------------+ 2 rows in set (0.00 sec)mysql>

    MySql 的autoCommit設(shè)置

    另外MySql中有autoCommit參數(shù),默認(rèn)為on,也就是開(kāi)啟狀態(tài)

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

    如果需要關(guān)閉autocommit,我們可以使用下面語(yǔ)句設(shè)置

    mysql> set autocommit=0;

    0就是OFF,1就是ON。設(shè)置為OFF之后,則用戶執(zhí)行語(yǔ)句之后,將一直處于一個(gè)事務(wù)中,直到執(zhí)行commit或者rollback,才會(huì)結(jié)束當(dāng)前事務(wù),重新開(kāi)始新的事務(wù)。


    大事務(wù)的定義

    定義: 運(yùn)行時(shí)間比較長(zhǎng),操作數(shù)據(jù)比較多的事務(wù)


    大事務(wù)的潛在風(fēng)險(xiǎn)

    • 鎖定太多的數(shù)據(jù),容易造成阻塞和超時(shí) 。
    • 回滾時(shí)間耗時(shí)較長(zhǎng),回滾過(guò)程中也容易阻塞
    • 容易造成主從延遲

    如何處理大事務(wù)

    • 避免一次處理太多數(shù)據(jù)
    • 移除事務(wù)中不必要的 select操作

    搞定MySQL

    總結(jié)

    以上是生活随笔為你收集整理的MySQL-性能优化_大表和大事务的常用处理方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。