數(shù)據(jù)庫簡單壓測

mysqlslap?是 Mysql 自帶的壓力測試工具,可以模擬出大量客戶端同時(shí)操作數(shù)據(jù)庫的情況,通過結(jié)果信息來了解數(shù)據(jù)庫的性能狀況


使用JM壓測數(shù)據(jù)庫

? ??1、點(diǎn)擊測試計(jì)劃,再點(diǎn)擊“瀏覽”,把JDBC驅(qū)動添加進(jìn)來;

? ? ? ? JDBC驅(qū)動:mysql-connector-java-5.1.39-bin.jar

? ? ? ? ?一般位于java環(huán)境的? ?\java\jre\lib\ext? ?文件中

????2、添加線程組,設(shè)置線程數(shù)、啟動時(shí)間、循環(huán)次數(shù)

? ? 3、右鍵點(diǎn)擊該線程組,再添加一個(gè)配置元件:JDBC Connection Configuration

? ? ? ? ? ?JDBC配置原件參數(shù)說明:

? ??????????????Variable Name(變量名):這里寫入數(shù)據(jù)庫連接池的名字

? ??????????????Database URL:數(shù)據(jù)庫連接地址 (jdbc:mysql://host:port/name)

? ??????????????JDBC Driver class:數(shù)據(jù)庫驅(qū)動(可以將需要連接的數(shù)據(jù)庫驅(qū)動jar包復(fù)制到j(luò)meter的lib/目錄下,然后在設(shè)置測試計(jì)劃界面,最下面的Library中導(dǎo)入)(com.mysql.jdbc.Driver)

????4、添加JDBC請求,(取樣器中添加)

????????????Variable name:這里寫入數(shù)據(jù)庫連接池的名字(和JDBC Connection Configuration名字保持一致 )

????????????Query:里面填入查詢數(shù)據(jù)庫數(shù)據(jù)的SQL語句(填寫的SQL語句末尾不要加“;”)

????????????parameter valus:數(shù)據(jù)的參數(shù)值

????????????parameter types:數(shù)據(jù)的參數(shù)類型

????????????cariable names:保存SQL語句返回結(jié)果的變量名

????????????result cariable name:創(chuàng)建一個(gè)對象變量,保存所有返回結(jié)果

????????????query timeout:查詢超時(shí)時(shí)間

????????????handle result set:定義如何處理由callable statements語句返回的結(jié)果

? ? 5、添加結(jié)果樹,調(diào)試

? ? 6、添加聚合報(bào)告,查看返回結(jié)果



利用Monyog實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)庫:


1/鏈接狀態(tài)

2/數(shù)據(jù)庫吞吐量

3/緩存未命中

4/聲明

5/CPU使用率

6/磁盤IO


隨著并發(fā)的增加,服務(wù)器的處理能力或者說tps也在增加,直到到達(dá)極限值。超過并發(fā)極限值后cpu或內(nèi)存資源會出現(xiàn)死鎖、阻塞等等問題導(dǎo)致服務(wù)器處理能力下降。

可以根據(jù)buffer_pool配置來提升事務(wù)處理能力

Buffer Pool

簡介:Innodb維護(hù)了一個(gè)緩存區(qū)域叫做Buffer Pool,用來緩存數(shù)據(jù)和索引在內(nèi)存中。Buffer Pool可以用來加速數(shù)據(jù)的讀寫,如果Buffer Pool越大,那么Mysql就越像一個(gè)內(nèi)存數(shù)據(jù)庫,所以了解Buffer Pool的配置可以提高Buffer Pool的性能。

innodb_buffer_pool_size:緩存區(qū)域的大小。

innodb_buffer_pool_chunk_size:當(dāng)增加或減少innodb_buffer_pool_size時(shí),操作以塊(chunk)形式執(zhí)行。塊大小由innodb_buffer_pool_chunk_size配置選項(xiàng)定義,默認(rèn)值128M。

innodb_buffer_pool_instances:當(dāng)buffer pool比較大的時(shí)候(超過1G),innodb會把buffer pool劃分成幾個(gè)instances,這樣可以提高讀寫操作的并發(fā),減少競爭。讀寫page都使用hash函數(shù)分配給一個(gè)instances。

當(dāng)增加或者減少buffer pool大小的時(shí)候,實(shí)際上是操作的chunk。buffer pool的大小必須是innodb_buffer_pool_chunk_sizeinnodb_buffer_pool_instances,如果配置的innodb_buffer_pool_size不是innodb_buffer_pool_chunk_sizeinnodb_buffer_pool_instances的倍數(shù),buffer pool的大小會自動調(diào)整為innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍數(shù),自動調(diào)整的值不少于指定的值。

如果指定的buffer大小是9G,instances的個(gè)數(shù)是16,chunk默認(rèn)的大小是128M,那么buffer會自動調(diào)整為10G。具體的配置可以參考mysql官網(wǎng)的介紹mysql reference


優(yōu)化思路:

在數(shù)據(jù)庫級別進(jìn)行優(yōu)化

????表格結(jié)構(gòu)合理

????是否有適當(dāng)?shù)?索引來提高查詢效率

????是否為每個(gè)表使用適當(dāng)?shù)拇鎯σ?/p>

????每個(gè)表是否使用適當(dāng)?shù)男懈袷?/p>

????應(yīng)用程序是否使用適當(dāng)?shù)?鎖定策略

????是否正確使用了用于緩存的所有內(nèi)存區(qū)域?也就是說,足夠大以容納頻繁訪問的數(shù)據(jù),但不能太大以至于它們會超載物理內(nèi)存并導(dǎo)致分頁。要配置的主要內(nèi)存區(qū)域是InnoDB緩沖池,MyISAM密鑰緩存和MySQL查詢緩存。

在硬件級別進(jìn)行優(yōu)化

? ??磁盤尋求。磁盤需要一段時(shí)間才能找到一塊數(shù)據(jù)。對于現(xiàn)代磁盤,平均時(shí)間通常低于10毫秒,因此我們理論上可以做到大約100次尋找。這個(gè)時(shí)間用新磁盤慢慢改善,并且很難針對單個(gè)表進(jìn)行優(yōu)化。優(yōu)化尋道時(shí)間的方法是將數(shù)據(jù)分配到多個(gè)磁盤上。

????磁盤讀寫。當(dāng)磁盤位于正確位置時(shí),我們需要讀取或?qū)懭霐?shù)據(jù)。使用現(xiàn)代磁盤,一個(gè)磁盤可提供至少10-20MB / s的吞吐量。這比搜索更容易優(yōu)化,因?yàn)槟梢詮亩鄠€(gè)磁盤并行讀取。

????CPU周期。當(dāng)數(shù)據(jù)在主存儲器中時(shí),我們必須處理它以獲得我們的結(jié)果。與內(nèi)存量相比具有大表是最常見的限制因素。但是對于小桌子,速度通常不是問題。

????內(nèi)存帶寬。當(dāng)CPU需要的數(shù)據(jù)量超過CPU緩存容量時(shí),主內(nèi)存帶寬成為瓶頸。對于大多數(shù)系統(tǒng)來說,這是一個(gè)不常見的瓶頸,但需要注意的是。

平衡可移植性和性能

? ??要在一個(gè)可移植MySQL程序中使用面向性能的SQL擴(kuò)展,可以將MySQL特定的關(guān)鍵字封裝在/*! * /語句的注釋分隔符中。其他SQL服務(wù)器將會忽略注釋的關(guān)鍵字。




具體參考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html#innodb-buffer-pool-lru

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容