之力seo網(wǎng)站關(guān)鍵詞優(yōu)化工具
目錄
一、MySQL優(yōu)化
3、mysql? server上的優(yōu)化?
3.1、MySQL查詢緩存
?3.2、索引和數(shù)據(jù)緩存
3.2、線程緩存
二、MySQL日志
2.1、redo log? ?重做日志
2.2、undo log 回滾日志
?2.3、錯誤日志
2.4、查詢?nèi)罩?/p>
2.5、二進制日志
2.5.1、基于binlog數(shù)據(jù)恢復(fù)實踐操作
六、慢查詢?nèi)罩?/p>
一、MySQL優(yōu)化
1、SQL和索引的優(yōu)化
2、應(yīng)用上的優(yōu)化
3、mysql? server上的優(yōu)化?
3.1、MySQL查詢緩存
MySQL 的查詢緩存是把 select 查詢語句上一次的查詢結(jié)果記錄下來放在緩存當(dāng)中,下一次再查詢相同內(nèi) 容的時候,直接從緩存中取出
來就可以了,不用再進行一遍真正的SQL 查詢。但是當(dāng)兩個 select查詢中 間出現(xiàn)insert,update,delete 語句的時候,查詢緩存就會被
清空。 查詢緩存適用更新不頻繁的表 ,因 為當(dāng)表更新頻繁的話,查詢緩存也總是被清空,過多的查詢緩存的數(shù)據(jù)添加和刪除,就會影
響MySQL的 執(zhí)行效率,還不如每次都從磁盤上查來得快(緩存指的就是一塊內(nèi)存,內(nèi)存I/O比磁盤 I/O 快很多)。 可以在MySQL 上通
過以下命令,來查看查詢緩存的設(shè)置:
?通過show status命令,可以查看MySQL查詢緩存的使用狀況,如下:
?3.2、索引和數(shù)據(jù)緩存
主要指的就是 innodb_buffffer_pool_size 配置項,從名字上就能看到,該配置項是針對 InnoDB 存儲引擎 起作用的,這個參數(shù)定InnoDB
存儲引擎的表數(shù)據(jù)和索引數(shù)據(jù)的最大內(nèi)存緩沖區(qū)大小。 innodb_buffffer_pool_size是同時為數(shù)據(jù)塊和索引塊做緩存,這個值設(shè)得越高,
訪問表中數(shù)據(jù)需要的磁 盤 I/O 就越少。
innodb_buffer_pool_size=512M
3.2、線程緩存
主要指配置文件中 thread_cache_size 配置項。給大家講過 MySQL Server 網(wǎng)絡(luò)模塊采用經(jīng)典的 I/O 復(fù)用
+ 線程池模型,之所以引入線程池,主要就是為了在業(yè)務(wù)執(zhí)行的過程中,不會因為臨時創(chuàng)建和銷毀線
程,造成系統(tǒng)性能降低,因為線程的創(chuàng)建和銷毀是很耗費性能的,所以線程池就是在業(yè)務(wù)使用之前,先
創(chuàng)建一組固定數(shù)量的線程,等待事件發(fā)生,當(dāng)有 SQL 請求到達 MySQL Server 的時候,在線程池中取一
個線程來執(zhí)行該 SQL 請求就可以了,執(zhí)行完成后,不銷毀線程,而是把線程再歸還到線程池中,等待下
一次任務(wù)的處理( MySQL 會根據(jù)連接量,自動加大線程池的數(shù)量)。
thread_cache_size=10
配置完 thread_cache_size ,重啟 MySQL Server 服務(wù)生效。
二、MySQL日志
2.1、redo log? ?重做日志
redo log :重做日志,用于記錄事務(wù)操作的變化,確保事務(wù)的 持久性 。 redo log 是在事務(wù)開始后就開始
記錄,不管事務(wù)是否提交都會記錄下來,在異常發(fā)生時(如數(shù)據(jù)持久化過程中掉電), InnoDB 會使用
redo log 恢復(fù)到掉電前的時刻,保證數(shù)據(jù)的完整性。
?MySQL執(zhí)行的時候都有緩存的輔助,不可能直接和磁盤打交道的
innodb_log_buffffer_size 默認(rèn)是 16M ,就是 redo log 緩沖區(qū)的大小,它隨著事務(wù)開始,就開始寫 redo
log ,如果事務(wù)比較大,為了 避免事務(wù)執(zhí)行過程中花費過多磁盤IO ,可以設(shè)置比較大的 redo log緩存,節(jié)省磁盤IO 。
你
2.2、undo log 回滾日志
undo log :回滾日志,保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個版本,用于事務(wù)執(zhí)行時的回滾操作,同時也是
實現(xiàn)多版本并發(fā)控制( MVCC )下讀操作的關(guān)鍵技術(shù)。
DB_TRX_ID:?事務(wù) ID ? ? ? ? ? ? ? ? ? ? ?DB_ROLL_PTR: 回滾指針
?2.3、錯誤日志
錯誤日志是 MySQL 中最重要的日志之一,它記錄了當(dāng) mysqld 啟動和停止時,以及服務(wù)器在運行過程
中發(fā)生任何嚴(yán)重錯誤時的相關(guān)信息。當(dāng)數(shù)據(jù)庫出現(xiàn)任何故障導(dǎo)致無法正常使用時,可以首先查看此日
志。
mysqld 使用錯誤日志名 host_name.err(host_name 為主機名 ) 并默認(rèn)在參數(shù) DATADIR( 數(shù)據(jù)目錄 ) 指定
的目錄中寫入日志文件。
2.4、查詢?nèi)罩?
查詢?nèi)罩居涗浟丝蛻舳说乃姓Z句。由于上線項目 sql 特別多,開啟查詢?nèi)罩?/span> IO 太多導(dǎo)致 MySQL 效率
低,只有在調(diào)試時才開啟,比如通過查看 sql 發(fā)現(xiàn)熱點數(shù)據(jù)進行緩存。
mysql> show global variables like "%genera%";
2.5、二進制日志
二進制日志 (BINLOG) 記錄了所有的 DDL( 數(shù)據(jù)定義語言 ) 語句和 DML( 數(shù)據(jù)操縱語言 ) 語句,但是不包括
數(shù)據(jù)查詢語句。語句以 “ 事件 ” 的形式保存,它描述了數(shù)據(jù)的更改過程。 此日志對于災(zāi)難時的數(shù)據(jù)恢復(fù)起
著極其重要的作用。
兩個重要的應(yīng)用場景:主從復(fù)制、數(shù)據(jù)恢復(fù)
查看 binlog : mysql> show binary logs;
通過 mysqlbinlog 工具( mysql 原生自帶的工具)可以快速解析大量的 binlog 日志文件,如:
shell> mysqlbinlog --no-defaults --database=school --base64-output=decode-rows
-v --start-datetime='2021-05-01 00:00:00' --stop-datetime='2021-05-10 00:00:00'
mysql-bin.000001 | more