//最快的方法?10000記錄?23MS

為靈川等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及靈川網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、靈川網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
public?static?void?insert()?{??
//?開時(shí)時(shí)間??
Long?begin?=?new?Date().getTime();??
//?sql前綴??
String?prefix?=?"INSERT?INTO?tb_big_data?(count,?create_time,?random)?VALUES?";??
try?{??
//?保存sql后綴??
StringBuffer?suffix?=?new?StringBuffer();??
//?設(shè)置事務(wù)為非自動(dòng)提交??
conn.setAutoCommit(false);??
//?Statement?st?=?conn.createStatement();??
//?比起st,pst會(huì)更好些??
PreparedStatement?pst?=?conn.prepareStatement("");??
//?外層循環(huán),總提交事務(wù)次數(shù)??
for?(int?i?=?1;?i?=?100;?i++)?{??
//?第次提交步長??
for?(int?j?=?1;?j?=?10000;?j++)?{??
//?構(gòu)建sql后綴??
suffix.append("("?+?j?*?i?+?",?SYSDATE(),?"?+?i?*?j??
*?Math.random()?+?"),");??
}??
//?構(gòu)建完整sql??
String?sql?=?prefix?+?suffix.substring(0,?suffix.length()?-?1);??
//?添加執(zhí)行sql??
pst.addBatch(sql);??
//?執(zhí)行操作??
pst.executeBatch();??
//?提交事務(wù)??
conn.commit();??
//?清空上一次添加的數(shù)據(jù)??
suffix?=?new?StringBuffer();??
}??
//?頭等連接??
pst.close();??
conn.close();??
}?catch?(SQLException?e)?{??
e.printStackTrace();??
}??
//?結(jié)束時(shí)間??
Long?end?=?new?Date().getTime();??
//?耗時(shí)??
System.out.println("cast?:?"?+?(end?-?begin)?/?1000?+?"?ms");??
}
Mysql的手冊(cè)上說建議使用一個(gè)CONNECTION。
但是許多老手都是一般建議開了CONN用完一個(gè)就關(guān)。
你如果覺得有時(shí)間可以都時(shí)時(shí)。
你要速度快,我覺得先把MYSQL服務(wù)器設(shè)置的非常好再說吧。
畢竟你調(diào)用C的借口問題不會(huì)很大。
診斷思路
mpstat -P ALL 1,查看cpu使用情況,主要消耗在sys即os系統(tǒng)調(diào)用上
perf top,cpu主要消耗在_spin_lock
生成perf report查看詳細(xì)情況
CPU主要消耗在mutex爭用上,說明有鎖熱點(diǎn)。
采用pt-pmp跟蹤mysqld執(zhí)行情況,熱點(diǎn)主要集中在mem_heap_alloc和mem_heap_free上。
Pstack提供更詳細(xì)的API調(diào)用棧
Innodb在讀取數(shù)據(jù)記錄時(shí)的API路徑為
row_search_for_mysql --》row_vers_build_for_consistent_read --》mem_heap_create_block_func --》mem_area_alloc --》malloc --》 ?_L_unlock_10151 --》__lll_unlock_wait_private
row_vers_build_for_consistent_read會(huì)陷入一個(gè)死循環(huán),跳出條件是該條記錄不需要快照讀或者已經(jīng)從undo中找出對(duì)應(yīng)的快照版本,每次循環(huán)都會(huì)調(diào)用mem_heap_alloc/free。
而該表的記錄更改很頻繁,導(dǎo)致其undo history list比較長,搜索快照版本的代價(jià)更大,就會(huì)頻繁的申請(qǐng)和釋放堆內(nèi)存。
Linux原生的內(nèi)存庫函數(shù)為ptmalloc,malloc/free調(diào)用過多時(shí)很容易產(chǎn)生鎖熱點(diǎn)。
當(dāng)多條 SQL 并發(fā)執(zhí)行時(shí),會(huì)最終觸發(fā)os層面的spinlock,導(dǎo)致上述情形。
解決方案
將mysqld的內(nèi)存庫函數(shù)替換成tcmalloc,相比ptmalloc,tcmalloc可以更好的支持高并發(fā)調(diào)用。
修改my.cnf,添加如下參數(shù)并重啟
[mysqld_safe]malloc-lib=tcmalloc
上周五早上7點(diǎn)執(zhí)行的操作,到現(xiàn)在超過72小時(shí),期間該實(shí)例沒有再出現(xiàn)cpu長期飆高的情形。
以下是修改前后cpu使用率對(duì)比
文章名稱:mysql怎么寫入頻繁,mysql 頻繁寫入
文章鏈接:http://chinadenli.net/article14/hsjdde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、電子商務(wù)、小程序開發(fā)、網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)