mysql 限速 mysql日常運維與引數調優

2021-10-17 16:03:37 字數 4091 閱讀 9266

為什麼要調整引數

不同伺服器之間的配置,效能不一樣

不同業務場景對資料的需求不一樣

mysql的預設引數只是個參考值,並不適合所有的應用場景

優化之前我們需要知道什麼

伺服器相關的配置

業務相關的情況

mysql相關的配置

伺服器相關的配置

硬體情況

作業系統版本

cpu,網絡卡節電模式

伺服器numa設定---記憶體分片,cpu對應記憶體;

raid卡快取

磁碟排程策略--write back

資料寫入cache即返回,資料非同步的從cache刷入儲存介質

磁碟排程策略--write through

資料同時寫入cache和儲存介質才返回寫入成功

write back 效能高於 write through

而write through  的安全性更高。

raid

raid --廉價的儲存陣列

簡單就是將多塊盤當做一塊盤來使用;容量是多盤的和,效能也是多盤之和;

問題,就是當其中一塊盤損壞後,無法保證其資料的安全性;

raid1

指兩塊盤做相互的映象--達到高可用

問題,只能使用兩塊盤來做,儲存空間 有限制

raid5

至少使用三塊盤,總儲存空間只有兩塊;因為它需要儲存校驗資料塊;

高可用的實現,是通過校驗資料塊,來恢復資料;

侷限,只能壞一塊盤,才能通過另外兩塊盤的 儲存校驗資料塊,進行資料恢復,如果壞了兩塊盤則不能進行資料恢復

raid10

先對兩塊盤做raid1,再做raid0

raid1保證資料安全性,raid0保證資料擴充套件性;

侷限,做raid1的兩塊盤同時壞了,則也不能保證資料安全性;

raid如何保證資料安全

bbu(backup  battery unit)

保證在電池有電的情況下,即使伺服器發生掉電或者宕機,也能夠將快取中的資料寫入到磁碟,從而保證資料的安全

注意事項

mysql有哪些注意事項

mysql的部署安裝

mysql的監控

mysql引數調優

部署mysql的要求

系統調優的依據:監控

實時監控mysql的slow log

實時監控資料伺服器的負載情況

實時監控mysql內部狀態值

網易內部監控的引數:

binlog檔案大小(mb)

bufferpool命中率(%)

cpu利用率(%)

磁碟讀操作延時(ms/op)

磁碟讀取位元組數(kb/s)

磁碟讀取次數(次/秒)

占用磁碟儲存空間(mb)

磁碟寫入操作延時(ms/op)

磁碟寫入位元組數(kb/s)

磁碟寫入次數(次/秒)

磁碟io利用率(%)

占用記憶體量(%)

記憶體使用率(%)

一般事務提交操作(次/秒)

刪除操作(次/秒)

插入操作(次/秒)

查詢操作(次/秒)

更新操作(次/秒)

二階段事務提交操作(次/秒)

通常關注哪些mysql  status

com_select/update/delete/insert

看資料庫的請求是否變多

bytes_received/bytes_sent

看 mysql總的吞吐量

buffer pool hit rate

innodb記憶體的命中率決定了效能

threads_connected/threads_created/threads_running

前兩個多的話, 可以判斷 應用是否使用連線池,或者連線池使用是否合理

活躍連線很多,說明資料庫很忙,可能是被人惡意攻擊;

為什麼要調整mysql的引數:

需要根據業務區動態調整這個通用的mysql資料庫,使其變成專用資料庫

有些引數,很可能是老版本做的,可能是為了限流和保護用的,但是隨著機器的效能提高這些引數,顯然是不合適的。

讀優化合理利用索引對mysql查詢效能至關重用

適當的調整mysql引數也能提公升查詢效能

innodb_buffer_pool_size:

快取池大小,innodb自己維護一塊記憶體區域完成新老資料的替換

innodb_thread_concurrency:

innodb內部併發控制引數,設定為0代表不做控制

如果併發請求較多,餐宿設定較小,後進來的請求將會排隊

寫優化表結構設計上使用自增字段作為表的主鍵

只對合適的字段加索引,索引太多影響寫入效能

監控伺服器磁碟io情況,如果寫延遲較大則需要擴容

選擇正確的mysql版本,合理設定引數

哪些引數有助於提高寫入效能

innodb_flush_log_at_trx_commit&&sync_binlog

控制redo log 重新整理

控制二進位制日誌的重新整理

innodb log file size

innodb_io_capacity

innodb insert buffer

innodb_flush_log_at_trx_commit:0,1,2

n = 0(高效,但不安全--無論伺服器宕機或者mysql宕機都會丟資料)

每隔一秒,把事務日誌快取區的資料寫到日誌檔案中,以及把日誌檔案的資料重新整理到磁碟上

n = 1 (低效,非常安全--都不會丟資料)

每個事務提交時候,把事務日誌從快取區寫到日誌檔案中,並且,重新整理日誌檔案的資料到磁碟上,優化使用此模式保證資料安全性

n = 2(高效,但不安全--伺服器死機會丟資料)

每個事務提交的時候,把事務日誌資料從快取區寫到日誌檔案中,每隔一秒,重新整理一次日誌檔案,但不一定重新整理到磁碟上,而是取決於作業系統的排程;

sync_binlog

控制每次寫入binlog,是否都需要進行一次持久化

如何保證事務安全

innodb_flush_log_at_trx_commit&&sync_binlog 都設為1

事務要和binlog保證一致性---才不會導致主從不一致

事務提交過程

序列有哪些問題

sas盤每秒只能有150--200個fsync

換算到資料每秒只能執行50--60個事務

社群和官方的改進

redo log 的作用

在資料庫 崩潰後的資料恢復;

redo log的問題

如果寫入頻繁導致redo log裡對應的最老的資料髒頁還沒有重新整理到磁碟,此時資料庫將卡住,強制重新整理髒頁到磁碟

mysql預設配置檔案才10m,非常容易寫滿,生成環境中應該提高redo log 的大小

innodb_io_capacity

innodb每次刷多少個髒頁,決定innodb儲存引擎的吞吐能力。

在ssd等高效能儲存介質下,應該提高該引數以提高資料庫的效能。

insert buffer

順序讀寫 vs 隨機讀寫

隨機請求效能遠小於順序請求

將盡可能多的隨機請求合併為順序請求才是提高資料庫效能的關鍵

insert buffer 對二級索引,的增刪改,的操作快取到 insert buffer中,然後將這些隨機請求合併成順序請求;

小結:伺服器配置要合理(核心版本,磁碟排程策略,raid卡快取)

完善的監控系統,提前發現問題

資料庫版本要跟上,不要太新,也不要太老

資料效能優化:

查詢優化:索引優化為主,引數優化為輔

寫入優化:業務優化為主,引數優化為輔

MySQL 日常運維

正規化和反正規化 正規化和反正規化是庫表設計過程中的概念 目前關聯式資料庫有六種正規化,越高的正規化資料庫冗餘越小 正規化化可以較少冗餘,從而減少了在更新資料時一致性方面的開銷 反正規化化由於冗餘的資料,在複雜的查詢場景下,可以避免聯合查詢和子查詢,提高查詢的效率 根據業務場景,選擇合適的正規化等級...

MySQL日常運維操作 持續更新

1 檢視當前連線數 這些引數都是什麼意思呢?threads cached 25 mysql管理的執行緒池中還有多少可以被復用的資源 threads connected 9 開啟的連線數 threads created 55158 表示建立過的執行緒數,如果發現threads created值過大的話...

mysql的日常操作 mysql日常操作命令

1.mysql連線 埠要用大寫p,與密碼p加以區分 mysql h127.0.0.1 p3306 uroot p 2.檢視mysql的資料庫列表 show databases 3.使用某個庫 use 資料庫名 4.檢視表列表 show tables 5.檢視資料庫的建立sql show create...