1. 程式人生 > >mysql大事務帶來的問題

mysql大事務帶來的問題

                                    大事務帶來的問題

一、什麼是大事務

  • 1.定義:執行時間比較長,操作的資料比較多的事務。
  • 2.大事務風險:a)鎖定太多的資料,造成大量的阻塞和鎖超時,回滾所需要的時間比較長。b)執行時間長,容易造成主從延遲。
  • 3.如何處理大事務:a)避免一次處理太多大資料。b)移出不必要在事務中的select操作

二、什麼是事務

  • 1.原子性:一個事務必須被視為一個不可分割的最小工作單元整個事務的所有操作要麼全部提交成功,要麼全部失敗,對於一個事務來說不可能只執行其中一部分。例如:銀行卡轉賬(整個事務中的所有操作要麼全部提交成功要麼全部失敗)。
  • 2.事務的一致性:一致性是指事務將資料庫從一種一致性狀態轉換到另外一種一致性狀態,在事務開始之前和事務結束後資料庫中資料的完整性沒有被破壞。例如:銀行卡轉賬(一張減去100元,一張增加100元資料沒有變化)。
  • 3.事務的隔離性:一個事務對資料庫中資料的修改,在未提交完成前對於其他事務不可見的。
  • a.讀未提交(read-uncommitted):就是一個事務可以讀取另一個未提交事務的資料髒讀(髒讀
  • b.讀已提交(read-committed):就是一個事務要等另一個事務提交後才能讀取資料(不可重複讀
  • 分析:若有事務對資料進行更新(UPDATE)操作時,讀操作事務要等待這個更新操作事務提交後才能讀取資料,可以解決髒讀問題。但是會出現了一個事務範圍內兩個相同的查詢卻返回了不同資料,這就是不可重複讀。
  • c.可重複讀(repeatable-read):就是在開始讀取資料(事務開啟)時,不再允許修改操作
  • d.可序列化(serializable):是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。
  • 注意
  • 併發性由高到低1>2>3>4
  • 隔離性由高到低4>3>2>1
  • show variables like '%iso%'(檢視當前隔離性級別)
  • set session tx_isolation (設定隔離級別)
  • 4.事務的永續性:一旦事務提交,則其所做的修改就會永久的儲存到資料庫中,此時即使系統崩潰,已經提交的修改資料也不會丟失。

三、大表帶來的問題

  • 1.大表定義:單表超過千萬行、檔案超過10G
  • 2.大表對查詢的影響:a)慢查詢、b)區分度底、c)大量磁碟IO、d)建立索引需要很長的時間、e)修改表結構需要長時間鎖表、f)影響正常的資料操作
  • 3.如何處理大表問題:a)分庫分表把一張表分成多個小表。難點:分表主鍵的選擇、分表後誇分割槽資料的查詢和統計。b)大表的歷史資料歸檔(前端增加歷史查詢)難點:時間點選擇,如何進行歸檔操作

四、在大促中資料庫伺服器

  • 1.資料庫架構:主從複製、讀寫分離、叢集等。
  • 2.TPS:每秒處理事務的速度(一個事務三個過程)。a)使用者請求伺服器、b)伺服器內部處理、c)伺服器返回給使用者。
  • 3.QPS:是一臺指定伺服器每秒能夠相應的查詢次數
  • 4.併發量:同一時間處理的請求的數量。
  • 5.連線數:和伺服器進行連線,但大部分處於sleep狀態,只有少部分在執行。
  • 6.併發量大,連線數大說明cpu空閒少繁忙。
  • 7.磁碟IO讀寫過高會對伺服器效能能造成影響。
  • 8.不要在主庫上資料庫備份(磁碟讀壓力增大)。