亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

Mysql IO 內存方面的優化

2024-07-24 13:08:41
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Mysql IO 內存方面的優化 的相關資料,需要的朋友可以參考下
 

這里使用的是mysql Ver 14.14 Distrib 5.6.19, for Linux (i686) using EditLine wrapper

一、mysql目錄文件

ibdata1:系統表空間 包含數據字典、回滾日志/undolog等

(insert buffer segment/double write segment/rollback segment/index segment/dictionary segment/undo segment)

ib_logfile0/ib_logfile1:事務日志/redolog

mysql-relay-bin:中繼日志

binarylog:二進制日志

general_log.log:常規日志

mysql_error.log:錯誤日志

slow_query.log:慢日志

.ibd:用戶表空間-數據文件(insert buffer bitmap page/leaf page segment/none leaf page segment)

Innodb buffer pool(內存):undo page /insert buffer page/adaptive hash index/index page/lock info/data dictionary

二、mysql線程

FILE IO

--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)
Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
393 OS file reads, 5 OS file writes, 5 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s

innodb后臺所有線程

| thread/sql/main | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/io_handler_thread | BACKGROUND | YES |
| thread/innodb/srv_master_thread | BACKGROUND | YES |
| thread/innodb/srv_purge_thread | BACKGROUND | YES |
| thread/innodb/srv_monitor_thread | BACKGROUND | YES |
| thread/innodb/srv_error_monitor_thread | BACKGROUND | YES |
| thread/innodb/srv_lock_timeout_thread | BACKGROUND | YES |
| thread/innodb/page_cleaner_thread | BACKGROUND | YES |
| thread/sql/signal_handler | BACKGROUND | YES |
| thread/sql/slave_sql | BACKGROUND | YES |
| thread/sql/slave_io | BACKGROUND | YES | 

IO線程分別是insert buffer thread、log thread、read thread、write thread。

在MySQL 5.6.10之后,默認線程處理模型使用執行每個客戶端連接一個線程語句。隨著越來越多的客戶端連接到服務器和執行語句,整體性能降低。線程池插件的提供旨在減少開銷,提高性能的其他線程的處理模式。該插件實現了通過有效地管理語句執行線程的大量客戶端連接的提高服務器性能的線程池。

InnoDB Plugin版本開始增加了默認IO thread的數量,默認的read thread和write thread分別增大到了4個,并且不再使用innodb_file_io_threads參數,而是分別使用innodb_read_io_threads和innodb_write_io_threads參數。

線程池解決每個連接模型解決單線程的幾個問題

Too many thread stacks make CPU caches almost useless in highly parallel execution workloads. The thread pool promotes thread stack reuse to minimize the CPU cache footprint.

With too many threads executing in parallel, context switching overhead is high. This also presents a challenging task to the operating system scheduler. The thread pool controls the number of active threads to keep the parallelism within the MySQL server at a level that it can handle and that is appropriate for the server host on which MySQL is executing.

Too many transactions executing in parallel increases resource contention. In InnoDB, this increases the time spent holding central mutexes. The thread pool controls when transactions start to ensure that not too many execute in parallel.

三、mysql訪問文件流程

Transaction 來自網絡

Mysql IO 內存方面的優化

三、影響IO/內存的一些參數

1、innodb_flush_log_at_trx_commit 設置為2

這參數是指 事務log(ib_logfile0、ib_logfile1)以怎樣的方式寫入到log buffer

=0 mysql crash 就丟失了,性能最好

buffer pool -> log buffer 每秒 wirte os cache & flush磁盤

=1 不會丟失,效率低

buffer pool -> log buffer 每次 write os cache & flush磁盤

=2 即使mysql崩潰也不會丟數據

buffer pool -> os cache 每秒flush 磁盤

注意:由于進程調度策略問題,這個“每秒執行一次 flush(刷到磁盤)操作”并不是保證100%的“每秒

2、sync_binlog

二進制日志(binary log)同步到磁盤的頻率。binary log 每寫入sync_binlog 次后,刷寫到磁盤。

如果 autocommit 開啟,每個語句都寫一次 binary log,否則每次事務寫一次。

默認值是 0,不主動同步,而依賴操作系統本身不定期把文件內容 flush 到磁盤

設為 1 最安全,在每個語句或事務后同步一次 binary log,即使在崩潰時也最多丟失一個語句或事務的日志,但因此也最慢。

大多數情況下,對數據的一致性并沒有很嚴格的要求,所以并不會把 sync_binlog 配置成 1,為了追求高并發,提升性能,可以設置為 100 或直接用 0

3、write/read thread

異步IO線程數

innodb_write_io_threads=16
innodb_read_io_threads=16

(該參數需要在配置文件中添加,重啟mysql實例起效)臟頁寫的線程數,加大該參數可以提升寫入性能

4、innodb_max_dirty_pages_pct

最大臟頁百分數,當系統中臟頁所占百分比超過這個值,INNODB就會進行寫操作以把頁中的已更新數據寫入到磁盤文件中。默認75,一般現在流行的SSD硬盤很難達到這個比例??梢罁嶋H情況在75-80之間調節

5、innodb_io_capacity=5000

從緩沖區刷新臟頁時,一次刷新臟頁的數量。根據磁盤IOPS的能力一般建議設置如下:

SAS 200
SSD 5000
PCI-E 10000-50000

6、innodb_flush_method=O_DIRECT(該參數需要重啟mysql實例起效)

控制innodb 數據文件和redo log的打開、刷寫模式。有三個值:fdatasync(默認),O_DSYNC,O_DIRECT。
fdatasync模式:寫數據時,write這一步并不需要真正寫到磁盤才算完成(可能寫入到操作系統buffer中就會返回完成),真正完成是flush操作,buffer交給操作系統去flush,并且文件的元數據信息也都需要更新到磁盤。
O_DSYNC模式:寫日志操作是在write這步完成,而數據文件的寫入是在flush這步通過fsync完成。

O_DIRECT模式:數據文件的寫入操作是直接從mysql innodb buffer到磁盤的,并不用通過操作系統的緩沖,而真正的完成也是在flush這步,日志還是要經過OS緩沖。

Mysql IO 內存方面的優化

通過圖可以看出O_DIRECT相比fdatasync的優點是避免了雙緩沖,本身innodb buffer pool就是一個緩沖區,不需要再寫入到系統的buffer,但是有個缺點是由于是直接寫入到磁盤,所以相比fdatasync的順序讀寫的效率要低些。

在大量隨機寫的環境中O_DIRECT要比fdatasync效率更高些,順序寫多的話,還是默認的fdatasync更高效。

7、innodb_adaptive_flushing 設置為 ON (使刷新臟頁更智能)

影響每秒刷新臟頁的數目

規則由原來的“大于innodb_max_dirty_pages_pct時刷新100個臟頁到磁盤”變為 “通過buf_flush_get_desired_flush_reate函數判斷重做日志產生速度確定需要刷新臟頁的最合適數目”,即使臟頁比例小于 innodb_max_dirty_pages_pct時也會刷新一定量的臟頁。

8、innodb_adaptive_flushing_method 設置為 keep_average

影響checkpoint,更平均的計算調整刷臟頁的速度,進行必要的flush.(該變量為mysql衍生版本Percona Server下的一個變量,原生mysql不存在)

9、innodb_stats_on_metadata=OFF

關掉一些訪問information_schema庫下表而產生的索引統計。

當重啟mysql實例后,mysql會隨機的io取數據遍歷所有的表來取樣來統計數據,這個實際使用中用的不多,建議關閉.

10、innodb_change_buffering=all

當更新/插入的非聚集索引的數據所對應的頁不在內存中時(對非聚集索引的更新操作通常會帶來隨機IO),會將其放到一個insert buffer中,當隨后頁面被讀到內存中時,會將這些變化的記錄merge到頁中。當服務器比較空閑時,后臺線程也會做merge操作。

由于主要用到merge的優勢來降低io,但對于一些場景并不會對固定的數據進行多次修改,此處則并不需要把更新/插入操作開啟change_buffering,如果開啟只是多余占用了buffer_pool的空間和處理能力。這個參數要依據實際業務環境來配置。

11、innodb_old_blocks_time=1000

使Block在old sublist中停留時間長為1s,不會被轉移到new sublist中,避免了Buffer Pool被污染BP可以被認為是一條長鏈表。被分成young 和 old兩個部分,其中old默認占37%的大?。ㄓ蒳nnodb_old_blocks_pct 配置)。靠近頂端的Page表示最近被訪問??拷捕说腜age表示長時間未被訪問。而這兩個部分的交匯處成為midpoint。每當有新的Page需要加載到BP時,該page都會被插入到midpoint的位置,并聲明為old-page。當old部分的page,被訪問到時,該page會被提升到鏈表的頂端,標識為young。

由于table scan的操作是先load page,然后立即觸發一次訪問。所以當innodb_old_blocks_time =0 時,會導致table scan所需要的page不讀的作為young page被添加到鏈表頂端。而一些使用較為不頻繁的page就會被擠出BP,使得之后的SQL會產生磁盤IO,從而導致響應速度變慢。

這時雖然mysqldump訪問的page會不斷加載在LRU頂端,但是高頻度的熱點數據訪問會以更快的速度把page再次搶占到LRU頂端。從而導致mysqldump加載入的page會被迅速刷下,并立即被evict(淘汰)。因此,time=0或1000對這種壓力環境下的訪問不會造成很大影響,因為dump的數據根本搶占不過熱點數據。不只dump,當大數據操作的時候也是如此。

12、binlog_cache_size

二進制日志緩沖大?。阂粋€事務,在沒有提交(uncommitted)的時候,產生的日志,記錄到Cache中;等到事務提交(committed)需要提交的時候,則把日志持久化到磁盤。 

設置太大的話,會比較消耗內存資源(Cache本質就是內存),更加需要注意的是:binlog_cache是不是全局的,是按SESSION為單位獨享分配的,也就是說當一個線程開始一個事務的時候,Mysql就會為這個SESSION分配一個binlog_cache

怎么判斷我們當前的binlog_cache_size設置的沒問題呢?

mysql> show status like 'binlog_%'; +-----------------------+-----------+| Variable_name | Value |+-----------------------+-----------+| Binlog_cache_disk_use | 1425 || Binlog_cache_use | 126945718 |+-----------------------+-----------+2 rows in set (0.00 sec)mysql> select @@binlog_cache_size; +---------------------+| @@binlog_cache_size |+---------------------+| 1048576 |+---------------------+1 row in set (0.00 sec) 

運行情況Binlog_cache_use 表示binlog_cache內存方式被用上了多少次,Binlog_cache_disk_use表示binlog_cache臨時文件方式被用上了多少次

13、innodb_file_per_table

innodb_file_per_table=1

獨立表空間

優點:

每個表的數據和索引都會存在自已的表空間中

可以實現單表在不同的數據庫中移動

空間可以回收(除drop table操作)

刪除大量數據后可以通過:alter table TableName engine=innodb;回縮不用的空間

使用turncate table也會使空間收縮

對于使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能

缺點:

單表增加過大,如超過100個G

結論:共享表空間在Insert操作上少有優勢。其它都沒獨立表空間表現好。當啟用獨立表空間時,請合理調整一 下:innodb_open_files ,InnoDB Hot Backup(冷備)的表空間cp不會面對很多無用的copy了。而且利用innodb hot backup及表空間的管理命令可以實現單現移動。

14、增加本地端口,以應對大量連接

echo ‘1024 65000′ > /proc/sys/net/ipv4/ip_local_port_range

該參數指定端口的分配范圍,該端口是向外訪問的限制。mysql默認監聽的3306端口即使有多個請求鏈接,也不會有影響。但是由于mysql是屬于高內存、高cpu、高io應用,不建議把多少應用于mysql混搭在同一臺機器上。即使業務量不大,也可以通過降低單臺機器的配置,多臺機器共存來實現更好。

15、增加隊列的鏈接數

echo ‘1048576' > /proc/sys/net/ipv4/tcp_max_syn_backlog

建立鏈接的隊列的數越大越好,但是從另一個角度想,實際環境中應該使用連接池更合適,避免重復建立鏈接造成的性能消耗。使用連接池,鏈接數會從應用層面更可控些。

16、設置鏈接超時時間

echo '10' > /proc/sys/net/ipv4/tcp_fin_timeout

該參數主要為了降低TIME_WAIT占用的資源時長。尤其針對http短鏈接的服務端或者mysql不采用連接池效果比較明顯。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美精品一区二区| 精品亚洲aⅴ在线观看| 日韩精品免费在线观看| 欧美综合第一页| 九九热最新视频//这里只有精品| 久久亚洲一区二区三区四区五区高| 一本一道久久a久久精品逆3p| 日本一区二三区好的精华液| 91色p视频在线| 久久亚洲国产精品| 欧美亚洲国产精品| 国产精品高潮呻吟久久av黑人| 视频在线观看99| 国产精品美女网站| 国产精品成人一区二区三区吃奶| 91精品国产91久久久久久最新| 亚洲人成网7777777国产| 国产suv精品一区二区三区88区| 亚洲美女www午夜| 精品久久中文字幕久久av| 亚洲欧美成人在线| 日本久久久久久久久久久| 欧美在线不卡区| 日韩av成人在线| 欧美巨大黑人极品精男| 成人激情在线观看| 社区色欧美激情 | 深夜福利国产精品| 欧美亚洲国产视频| 九九精品在线观看| 成人天堂噜噜噜| 国内精品模特av私拍在线观看| 亚洲国产精品人久久电影| 精品国偷自产在线视频99| www欧美xxxx| 亚洲欧美三级在线| 琪琪第一精品导航| 欧美一区二区大胆人体摄影专业网站| 久久久久中文字幕| 亚洲第一区在线| 日本午夜精品理论片a级appf发布| 国产精品一区=区| 国产精品久久久久久一区二区| 国产一区私人高清影院| 亚洲美女在线看| 亚洲免费小视频| 亚洲午夜精品久久久久久性色| 欧美做受高潮1| 亚洲第一免费播放区| 日韩在线视频网站| 亚洲人成网站色ww在线| 色妞在线综合亚洲欧美| 国产成人在线亚洲欧美| 欧美国产高跟鞋裸体秀xxxhd| 成人疯狂猛交xxx| 久久成人精品一区二区三区| 色视频www在线播放国产成人| 午夜精品久久17c| 久久久久亚洲精品成人网小说| www.久久草.com| 国产欧美在线播放| 欧美精品电影免费在线观看| 久久亚洲影音av资源网| 中文字幕日韩在线观看| 日韩国产高清视频在线| 欧美成在线观看| 久久天天躁狠狠躁老女人| 久久九九国产精品怡红院| 亚洲bt欧美bt日本bt| 成人国产精品久久久| 国模吧一区二区| 亚洲女同精品视频| 欧美一区二区三区免费视| 日韩激情第一页| 国产日韩精品一区二区| 亚洲欧美日韩久久久久久| 国产成人综合av| 91在线观看免费网站| 最近2019年日本中文免费字幕| 亚洲欧美国产一区二区三区| 日韩亚洲欧美中文在线| 日韩成人性视频| 国外日韩电影在线观看| 精品久久中文字幕| 亚洲精品国产精品自产a区红杏吧| 91精品国产91久久久久久久久| 亚洲男人天堂久| 精品精品国产国产自在线| 色婷婷综合成人| 欧美性色19p| 2019中文字幕在线免费观看| 欧美在线国产精品| 色婷婷综合久久久久| 欧美老女人性视频| 亚洲精品97久久| 91福利视频网| 成人激情视频网| 亚洲欧美另类国产| 亚洲色图av在线| 国产精品高潮呻吟久久av无限| 亚洲女人被黑人巨大进入al| 欧美俄罗斯乱妇| 麻豆国产精品va在线观看不卡| 国产91ⅴ在线精品免费观看| 久久人人爽国产| 最新的欧美黄色| 国自在线精品视频| 欧美精品午夜视频| 亚洲国产精品成人一区二区| 久久视频在线播放| 日韩精品亚洲元码| 国产成人精品a视频一区www| 亚洲欧美变态国产另类| 欧美精品在线极品| 狠狠操狠狠色综合网| 国产亚洲精品91在线| 国产成人精品日本亚洲| 中文字幕日韩在线播放| 久久久97精品| 日韩福利在线播放| 麻豆国产va免费精品高清在线| 黑人狂躁日本妞一区二区三区| 国产一区二区激情| 日韩av成人在线观看| 97婷婷涩涩精品一区| 欧美黑人狂野猛交老妇| 欧美插天视频在线播放| 中文字幕国产精品| 国产精品三级久久久久久电影| 中文字幕免费精品一区高清| 国自产精品手机在线观看视频| 欧美亚洲国产视频| 国产97在线视频| 青青久久aⅴ北条麻妃| 久久久国产视频91| 亚洲高清av在线| 亚洲欧美中文另类| 欧美日韩午夜剧场| 国产美女久久精品香蕉69| 色综合久久88色综合天天看泰| 欧美成人亚洲成人| 欧美性猛交xxxx乱大交极品| 久久精品91久久香蕉加勒比| 中文字幕日本精品| 色小说视频一区| 亚洲国产高清福利视频| 亚洲国产成人精品女人久久久| 国产高清视频一区三区| 欧美日韩精品在线视频| 亚洲一区免费网站| 中文字幕欧美国内| 亚洲欧美在线免费观看| 欧美日韩一二三四五区| 在线视频欧美日韩| 狠狠躁天天躁日日躁欧美| 欧美午夜性色大片在线观看| 国产精品专区h在线观看| 国产一区深夜福利| 国产91精品久久久久久| 国产精品久久久久久久久久久久久久| 亚洲欧美一区二区精品久久久| 国产91露脸中文字幕在线| 国产偷国产偷亚洲清高网站| 国产一级揄自揄精品视频|