mysql 併發測試

2022-01-30 06:05:32 字數 3942 閱讀 9595

針對上一節做一些針對公司業務的測試。

我們來做一些壓力測試。

伺服器配置:

作業系統: centos 5.6-64

cpu: 8核

記憶體: 8g

硬碟:sas

檔案系統:linux

mysql:5.6.

網絡卡: 100m

網路環境: 良好

資料庫表:

c_account_customer,這裡用來根據id查詢、更新某些字段

create table `c_account_customer` (

`id` int(10) unsigned not null auto_increment comment '表主鍵',

`customer_id` int(10) unsigned not null comment '客戶號',

`item_id` int(10) unsigned not null comment '科目號',

`ref_id` int(10) unsigned not null default '0' comment '業務識別號',

`debit_balance` decimal(14,2) default null comment '借方餘額',

`credit_balance` decimal(14,2) default null comment '貸方餘額',

`last_time` timestamp not null default current_timestamp on update current_timestamp comment '最後更新時間',

primary key (`id`),

unique key `customer_id` (`customer_id`,`item_id`,`ref_id`)

) engine=innodb auto_increment=2 default charset=utf8;

c_entry_company用來插入借、貸科目資訊

create table `c_entry_company` (

`id` int(10) unsigned not null auto_increment comment '表主鍵',

`entity_id` int(10) unsigned not null comment '機構號',

`item_id` int(10) unsigned not null comment '科目號',

`ref_id` int(11) not null default '0' comment '業務識別號',

`direction` tinyint(3) unsigned not null comment '記賬方向',

`amount` decimal(10,0) not null comment '記賬金額',

`operation` int(11) default null comment '操作型別號',

`operation_id` int(11) default null comment '操作流水號',

`note` varchar(200) default null comment '業務備註',

`create_time` timestamp not null default current_timestamp on update current_timestamp comment '資料建立時間',

primary key (`id`)

) engine=innodb default charset=utf8;

testvalue表,用來記錄事務中查詢到的字段值,進行結果分析:

create table `testvalue` (

`id` int(11) not null auto_increment,

`val` decimal(14,2) default null,

primary key (`id`)

) engine=innodb default charset=utf8;

針對上述三個資料表的事務操作:

create definer=`root`@`localhost` procedure `test`(out debitb decimal(14,2))

begin

start transaction ;

select @db:=debit_balance from c_account_customer where id=1 for update;

set debitb=@db;

insert into abacus.testvalue (val) values (@db);

insert into abacus.c_entry_customer (customer_id,item_id,ref_id,direction,amount,operation,operation_id,note) values (1,1,1,1,1,1,1,1);

insert into abacus.c_entry_customer (customer_id,item_id,ref_id,direction,amount,operation,operation_id,note) values (1,2,1,1,1,1,1,1);

update abacus.c_account_customer set debit_balance=@db+1 where id=1;

commit;

endc#測試**

public static void testcomplicating()

}console.writeline("結束:" + datetime.now+";迴圈次數:"+num);

}public static void complicating()

}public static void execution(object i)

;mysqlhelper.runprocedure("test", parameters, "test");

=>logs.jobstatus.info("更新前值:"+debitb.value+";當前執行緒id:" + thread.currentthread.managedthreadid + ";迴圈:" + (int)i));

第一組測試結果

mysql 伺服器最大連線數: 1024

.net 客戶端連線池最大連線數:500

不模擬耗時操作

測試前先插入一條資料:insert into abacus.c_account_customer (customer_id,item_id,ref_id,debit_balance,credit_balance)values(1,1,1,10000,10000);

第1次: 100個併發 ,完成耗時3秒,無資料丟失,無資料錯誤。

第2次: 500個併發 ,完成耗時10秒,無資料丟失,無資料錯誤。

第3次: 5個併發,while迴圈中持續1分鐘,完成耗時1分鐘,事務次數171540,無資料丟失,無資料錯誤。

第4次: 10併發,while迴圈中持續10分鐘,完成耗時10分鐘,事務1885640次數 ,無丟資料( c_entry_company中3771280條資料),無資料錯誤(debit_balance=1895640.00 =1885640+10000)。

第5次: 10併發,while迴圈中持續30分鐘,完成耗時30分鐘,迴圈次數(694861),事務6948610次數 ,無丟資料( c_entry_company中13897220條資料),無資料錯誤(debit_balance=6958610.00 =6948610+10000)。

圖例:上圖中 ,

圖1,2 為第4次測試時mysql伺服器截圖。

圖3為第4次測試時mysql伺服器每秒執行事務次數。

圖4為第5次測試時mysql伺服器每分鐘執行事務次數。

注:歡迎提出更優、合理的方案。

併發測試集合點測試併發

併發測試集合點 定時器下的synchronizing timer number of simulated users to group by 集合多少人後再執行請求 timeout in milliseconds 指定人數 多少秒沒集合到算超時 設定延遲時間以毫秒為單位 注意 如果設定timeout...

mysql的高併發測試驗證

mysql的高併發測試,針對高併發進行測試 此測試是在本地的apache測試 d wamp apache bin ab.exe c 200 n 200 此 是自己的測試 裡面的 如下 mysql.php檔案的內容如下 error reporting 0 echo mysql connect 127....

Mysql 5 5 53 事務與併發測試

1.在事務中使用查詢遇上併發的情況 1 執行緒1事務開啟,執行緒2查詢資料 原始資料 tea name bbb 執行緒1 start transaction 執行緒1 select from t a tea where tea id 1 執行緒2 select from t a tea where ...