您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決mysql性能問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決mysql性能問(wèn)題”這篇文章吧。
最近項(xiàng)目使用mysql遇到了性能問(wèn)題。單表400W以上數(shù)據(jù)時(shí), 增,刪,改,查 的速度都明顯下降。
我們是做呼叫中心的,平均1秒鐘就要處理20個(gè)呼叫,所以 最最保守的計(jì)算 1秒鐘也要對(duì)單表進(jìn)行20次插入操作,還有更多的查詢操作,所以對(duì)性能要求略高。(有點(diǎn)兒跑題。。。。)
遇到了問(wèn)題就要解決,優(yōu)化!我們優(yōu)化的步驟如下(過(guò)程中遇到的困難略):
1.優(yōu)化索引,將所有sql語(yǔ)句,尤其是速度慢的都拿出來(lái)分析,一條一條的分析。(利用 EXPLAIN )要讓所有查詢都使用到索引。
2.優(yōu)化數(shù)據(jù)庫(kù)本身,對(duì)my.cnf(my.ini)文件進(jìn)行優(yōu)化。但是個(gè)人覺(jué)得效果不是很明顯(請(qǐng)牛人指導(dǎo)。)
my.cnf文件配置如下。(4核cpu 4G 內(nèi)存)這個(gè)my.cnf 具體問(wèn)題具體分析,配置起來(lái)也有很多事兒比較有講究的。
所以需要逐步調(diào)試。(切忌不可大量修改后再重啟mysql....有可能啟動(dòng)失敗。)
Java代碼
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir="D:/Program Files/MySQL/MySQL Server 5.1/"
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"
default-character-set=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=1000
query_cache_size=120M
table_cache=1024M
tmp_table_size=32M
thread_cache_size=64
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=64M
key_buffer_size=512M
max_allowed_packet = 32M
max_heap_table_size = 32M
table_open_cache = 512M
thread_concurrency = 8
innodb_lock_wait_timeout = 50
bulk_insert_buffer_size = 64M
key_cache_block_size=2048
skip-external-locking
skip-name-resolve
read_buffer_size=8M
read_rnd_buffer_size=8M
sort_buffer_size=64M
innodb_additional_mem_pool_size=20M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=8M
innodb_buffer_pool_size=512M
innodb_log_file_size=24M
innodb_thread_concurrency=10
3.分表 分表是解決大數(shù)據(jù)量的最佳方案。
我們的my 單表400萬(wàn) 以上數(shù)據(jù)的時(shí)候就不符合性能要求了(我們對(duì)性能要求有點(diǎn)兒高)。但是我們一天產(chǎn)生的數(shù)據(jù)量就達(dá)到了單表200萬(wàn)。??偛荒?天就建立一套表出來(lái)吧?? 那1,2年以后 數(shù)據(jù)庫(kù)就會(huì)有600多套表(一套表有幾十張呢,也就是上萬(wàn)張單表),看著都頭疼呀。。。。。
4.從業(yè)務(wù)上解決,實(shí)現(xiàn)曲線救國(guó)。(這也是我們最后采用的方法,這個(gè)方法不一定適用其他業(yè)務(wù))
我們的業(yè)務(wù)是這樣,1小時(shí)對(duì)流水?dāng)?shù)據(jù)結(jié)轉(zhuǎn)一次,生成統(tǒng)計(jì)數(shù)據(jù)。
最后決定生成插入流水?dāng)?shù)據(jù)的時(shí)候分2套流水表插入(一套用來(lái)保存流水?dāng)?shù)據(jù),另一套用來(lái)結(jié)轉(zhuǎn)統(tǒng)計(jì)數(shù)據(jù)。)
為什么要分成2套呢?
為了性能,用來(lái)保存流水?dāng)?shù)據(jù)的那套表就不去對(duì)它進(jìn)行操作了。(起到備份數(shù)據(jù)之用。)
用來(lái)結(jié)轉(zhuǎn)成統(tǒng)計(jì)數(shù)據(jù)的那套流水表,在結(jié)轉(zhuǎn)結(jié)束之后就會(huì)刪除掉以結(jié)轉(zhuǎn)的數(shù)據(jù)。
這樣一來(lái),結(jié)轉(zhuǎn)用的那套流水表的數(shù)據(jù)量就不會(huì)持續(xù)增長(zhǎng),也就保證了數(shù)據(jù)結(jié)轉(zhuǎn)的效率。
希望對(duì)其他人 有點(diǎn)兒小啟示。。。。。。
請(qǐng)大家不要笑我。。我的mysql 是盜版的。。。沒(méi)有mysql DBA給我調(diào)優(yōu)。更沒(méi)有人會(huì)給我訂制我們專用的mysql
只能這樣曲線救國(guó)的解決了。。。。
以上是“如何解決mysql性能問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。