欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql配置連接參數(shù)設(shè)置及性能優(yōu)化

 更新時間:2022年05月06日 14:16:31   作者:??斜月????  
這篇文章主要介紹了mysql配置連接參數(shù)設(shè)置及性能優(yōu)化,主要介紹配置信息的說明和性能優(yōu)化,具有一定的參考價值,需要的小伙伴可以參考一下

1 前言

在java開發(fā)中,最常用的數(shù)據(jù)存儲就是數(shù)據(jù)庫,其中常用的就是mysql,關(guān)于數(shù)據(jù)庫的連接配置信息,可能就不是那么的清除了,這里做一個配置信息的說明。

2 數(shù)據(jù)庫連接配置信息

jdbc:mysql://localhost:3306/database_name?serverTimezone=Asia/Shanghai&useUnicode=true&
characterEncoding=utf8&useSSL=false&tinyInt1isBit=true&allowMultiQueries=true&
rewriteBatchedStatements=true&useAffectedRows=true&defaultFetchSize=10000&
zeroDateTimeBehavior=convertToNull

3 配置信息說明

  • 1、serverTimezone=Asia/Shanghai,即時區(qū)設(shè)置,上海時間即東八區(qū),高版本的mysql需要設(shè)置為 GMT%2B8(GMT+8)
  • 2、useUnicode=true 使用unicode 編碼
  • 3、characterEncoding=utf8 數(shù)據(jù)庫連接字符集
  • 4、useSSL=false 是否使用 ssl
  • 5、tinyInt1isBit=true 轉(zhuǎn)換為 tinyint(1) 轉(zhuǎn)換為 boolean ,否則為 int
  • 6、allowMultiQueries=true 是否允許多行查詢,在批量更新數(shù)據(jù)時,update 語句使用分號(;)進行連接,此時則需要配置運行多行查詢。
  • 7、rewriteBatchedStatements=true 批處理時需要設(shè)置該參數(shù),在mysql5.1.13以上版本才能使用,對 update/insert/delete 都可以生效。數(shù)據(jù)量大時,消耗時間 jdbc batch < mybatis batch < foreach 循環(huán)。
  • 8、useAffectedRows=true,默認(rèn)為false。是否使用影響行數(shù),默認(rèn)為找的所有修改行數(shù),即false。在update 的情況下,更新3條,如果只有兩條有變化,則返回2(useAffectedRows=true),否則返回3.
  • 9、defaultFetchSize=10000 默認(rèn)獲取條數(shù)
  • 10、zeroDateTimeBehavior=convertToNull 默認(rèn)時間轉(zhuǎn)換為null,避免轉(zhuǎn)換報錯。0000-00-00 時間轉(zhuǎn)換為 null 

4 數(shù)據(jù)庫sql

# 正常的插入數(shù)據(jù)
insert into table_name
# 如果數(shù)據(jù)存在則忽略,否則進行插入
insert ignore into table_name
# 如果數(shù)據(jù)存在則更新
insert into table_name (id,name) values(1,'小明') ON DUPLICATE KEY UPDATE id = 1,name = "xiaoming"
# 如果存在則替換
replace into table_name
# mysql 還有計算功能
select 1 + 4 # 計算結(jié)果為 5
# ifnull 如果字段為空則賦默認(rèn)值為 0
select ifnull(age,0) from table_name
# 正則查詢 user_no 不包含 數(shù)字
SELECT * FROM table_name  WHERE user_no REGEXP '[^0-9]'
# 時間處理
select
  DATE_FORMAT(create_time, '%Y%m%d %T'), -- 20210204 12:00:00
  id,
  DATE_FORMAT(create_time, '%Y%m%d%H') as time_str, -- 2021020412
  DATE_FORMAT(create_time, '%Y%m%d') as day_str,  -- 20210204
  DATE_FORMAT(create_time, '%H') as hour_str,  -- 12
  WEEKDAY(create_time) as week_str  -- 0-6,分別是 周一到周日
from
  table_name

5 mysql 性能優(yōu)化的關(guān)注點

其實,mysql 性能優(yōu)化不是簡單的知道和使用 explainshow profile就天下無敵了,這兩個只是重要的方面,何況作為資深的CRUD工程師還未必經(jīng)常使用,任何的知識都是了解->熟悉->精通,當(dāng)真正的了解原理或者系統(tǒng)的掌握才是真正的悟道。接下來開始進入正題,mysql又能優(yōu)化主要為4個方面:

  • 1 硬件資源和操作系統(tǒng)方面的優(yōu)化
  • 2 架構(gòu)設(shè)計方面的優(yōu)化
  • 3 mysql服務(wù)配置項的優(yōu)化
  • 4 sql執(zhí)行層面的優(yōu)化

6 硬件和操作系統(tǒng)方面的優(yōu)化

硬件和操作系統(tǒng)就是指mysql服務(wù)所運行的服務(wù)器硬件資源情況,影響mysql性能的主要因素分為 cpu 、內(nèi)存大小、磁盤讀寫速度、網(wǎng)絡(luò)帶寬,硬件是指操作系統(tǒng)的網(wǎng)絡(luò)配置和系統(tǒng)文件句柄數(shù)設(shè)置(linux 系統(tǒng)中,一切皆文件,了解過ES搭建的同學(xué)都知道,ES的搭建就需要修改系統(tǒng)最大打開的文件數(shù)) ,這部分的優(yōu)化一般由運維工程師和DBA聯(lián)合完成,在項目開發(fā)伊始,可以根據(jù)業(yè)務(wù)需要承載的數(shù)據(jù)量和 TPS 要求根據(jù)經(jīng)驗,考慮后續(xù)的業(yè)務(wù)擴展性,選擇與業(yè)務(wù)相適配的mysql服務(wù)。

7 架構(gòu)設(shè)計方面的優(yōu)化

mysql是一個磁盤io訪問頻繁的關(guān)系型數(shù)據(jù)庫,在高并發(fā)和高性能的應(yīng)用場景中會承受巨大的壓力,可以采取以下措施來應(yīng)對:

  • 1 搭建mysql主從集群,單個mysql服務(wù)一旦宕機,將會導(dǎo)致依賴mysql服務(wù)的應(yīng)用無法響應(yīng)導(dǎo)致服務(wù)不可用,可以采用采用主從集群或者主主集群避免單點故障,保障mysql服務(wù)的高可用性。
  • 2 讀寫分離設(shè)計,在讀多寫少的場景中,可以采用讀寫分離的方案避免讀寫沖突導(dǎo)致的性能問題。
  • 3 采用分庫分表的設(shè)計。通過分庫可以降低單個mysql服務(wù)器的io壓力,通過分表的機制可以降低單表數(shù)據(jù)量,提高sql的查詢效率。
  • 4 熱點數(shù)據(jù)引入Nosql。引入Redis或者MongoDB等非關(guān)系型數(shù)據(jù)庫,可以緩解mysql的訪問壓力,提升數(shù)據(jù)的檢索性能。

8 mysql 程序配置優(yōu)化。

mysql配置文件的優(yōu)化,一般通過 mysql配置文件my.cnf來設(shè)置。配置項一般包括:

  • mysql的最大連接數(shù)max_connections(注意這里說的不是項目中設(shè)置的數(shù)據(jù)庫連接池的連接數(shù))
  • 最大的傳輸包(max_allowed_packet = 16M
  • 開啟 bin log(默認(rèn)不開啟,主要用在 mysql 同步的場景中)
  • general log(通用日志記錄 sql 的執(zhí)行記錄)來記錄日志
  • 還有就是緩沖區(qū)(buffer pool), 包括: 關(guān)聯(lián)查詢緩沖區(qū) join_buffer_size=128M, 讀數(shù)據(jù)緩沖區(qū)read_buffer_size=16M,隨機讀緩沖區(qū)read_rnd_buffer_size=32M,排序數(shù)據(jù)緩沖區(qū) sort_buffer_size=32M, innodb 數(shù)據(jù)緩沖區(qū)innodb_buffer_pool_size=4G。

這些參數(shù)的配置一般和服務(wù)器的資源和使用場景有關(guān),需要根據(jù)實際情況來設(shè)置。配置項的修改需要關(guān)注兩個點,一是配置的作用范圍,分為會話級別和全局范圍,全局參數(shù)對已經(jīng)存在的會話不會生效,會話參數(shù)設(shè)置只在當(dāng)前會話生效,會話結(jié)束則配置失效,全局類的配置放在默認(rèn)的配置文件中,否則服務(wù)重啟將會失效。第二是否支持熱加載

9 sql 執(zhí)行層面優(yōu)化

sql執(zhí)行層面優(yōu)化的要點如下:

  • 1 慢sql查詢分析,通過慢sql查詢?nèi)罩竞吐?code>sql查詢分析工具來定位有問題的sql列表
  • 2 執(zhí)行計劃。通過explain 關(guān)鍵字 + 慢 sql查看當(dāng)前sql的執(zhí)行計劃,需要重點關(guān)注select_type、type、 key、 rows、 filterd、 possible_keys來分析 sql 慢的原因.
  • 3 使用show profile工具來分析,該工具是mysql提供的分析當(dāng)前會話中sql語句資源消耗情況的工具,可以用于sql調(diào)優(yōu)的測量,當(dāng)前會話中默認(rèn)是關(guān)閉的狀態(tài),需要根據(jù)情況打開,默認(rèn)保存最近 15 次的分析結(jié)果,針對慢sql可以通過show profile工具來進行詳細(xì)分析,得到整個過程中所以資源的開銷情況,比如io開銷cpu開銷和內(nèi)存開銷等情況

10 最終總結(jié)

  • 1sql的查詢一定要根據(jù)索引來進行數(shù)據(jù)掃描
  • 2 避免查詢列上使用函數(shù)運算或者運算符,避免索引失效
  • 3where條件語句中like %好盡量放置在右邊
  • 4 使用索引掃描,聯(lián)合索引的列從左往右,命中的越多越好
  • 5sql語句的排序字段盡量是索引字段,否則會開辟空間進行結(jié)果排序
  • 6 查詢語句避免使用*號,使用需要查詢的列信息即可。
  • 7 關(guān)聯(lián)查詢或者子查詢使用小結(jié)果集驅(qū)動大結(jié)果集。

到此這篇關(guān)于mysql配置連接參數(shù)設(shè)置及性能優(yōu)化的文章就介紹到這了,更多相關(guān)mysql配置設(shè)置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論