本文實例講述了mysql壓力測試的腳本,分享給大家供大家參考。具體如下:
創建表DEPT
復制代碼 代碼如下:CREATE TABLE dept( /*部門表*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
dname VARCHAR(20) NOT NULL DEFAULT "",
loc VARCHAR(13) NOT NULL DEFAULT ""
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
創建表EMP雇員
復制代碼 代碼如下:CREATE TABLE emp
(empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
ename VARCHAR(20) NOT NULL DEFAULT "",
job VARCHAR(9) NOT NULL DEFAULT "",
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
hiredate DATE NOT NULL,
sal DECIMAL(7,2) NOT NULL,
comm DECIMAL(7,2) NOT NULL,
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0
)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
工資級別表
復制代碼 代碼如下:CREATE TABLE salgrade
(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
losal DECIMAL(17,2) NOT NULL,
hisal DECIMAL(17,2) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
隨機產生字符串
定義一個新的命令結束符合
復制代碼 代碼如下:delimiter $$
刪除自定的函數
復制代碼 代碼如下:drop function rand_string $$
這裡我創建了一個函數.
復制代碼 代碼如下:create function rand_string(n INT)
returns varchar(255)
begin
declare chars_str varchar(100) default
'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
while i < n do
set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i = i + 1;
end while;
return return_str;
end $$
delimiter ;
select rand_string(6);
隨機產生部門編號
復制代碼 代碼如下:delimiter $$
drop function rand_num $$
這裡我們又自定了一個函數
復制代碼 代碼如下:create function rand_num( )
returns int(5)
begin
declare i int default 0;
set i = floor(10+rand()*500);
return i;
end $$
delimiter ;
select rand_num();
向emp表中插入記錄(海量的數據)
復制代碼 代碼如下:delimiter $$
drop procedure insert_emp $$
create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i + 1;
insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
until i = max_num
end repeat;
commit;
end $$
delimiter ;
調用剛剛寫好的函數, 1800000條記錄,從100001號開始
復制代碼 代碼如下:call insert_emp(100001,1800000);
向dept表中插入記錄
復制代碼 代碼如下:delimiter $$
drop procedure insert_dept $$
create procedure insert_dept(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i + 1;
insert into dept values ((start+i) ,rand_string(10),rand_string(8));
until i = max_num
end repeat;
commit;
end $$
delimiter ;
call insert_dept(100,10);
向salgrade 表插入數據
復制代碼 代碼如下:delimiter $$
drop procedure insert_salgrade $$
create procedure insert_salgrade(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
ALTER TABLE emp DISABLE KEYS;
repeat
set i = i + 1;
insert into salgrade values ((start+i) ,(start+i),(start+i));
until i = max_num
end repeat;
commit;
end $$
delimiter ;
#測試不需要了
#call insert_salgrade(10000,1000000);
希望本文所述對大家的MySQL數據庫程序設計有所幫助。
一個是使用測試工具,比如mysqlslap等等等等。 追問: mysqlslap工具在網上看了,但不知道怎麼用啊,能否告知一二?要下載這個工具嗎? 回答: 你要是有MYSQL5系列的數據庫,這個工具是自帶的啊。如果沒有,建議下載。 追問: 我是MySql5.1的啊,但還是沒找到在哪兒啊?能否指點一下啊,謝謝! 回答: 暈,你當成可視化的了?無語。你打開控制台,然後就可以執行測試的命令了。你可以參考下MYSQL的官方說明:dev.mysql.com/doc/refman/5.1/en/mysqlslap.html這個網上有很多的測試教程,你可以看看,不過不是特別實用。 追問: 我是應用程序的怎麼用啊? 回答: 我看,你可能有點誤解了壓力測試了。第一,你的應用程序,是否是以數據為中心的,如果不是,那之前我和你說的那些全部就是廢話。第二,就算是以數據為中心的,你也沒說明白你要測試什麼,如果你要測試MYSQL,那沒什麼必要。因為已經是很成熟的產品了。第三,如果是你要測試你的程序,而且你的程序擁有後台數據庫,那你可以針對不同平台的解決方案,使用不同的測試方法,比如如果是.NET + MYSQL數據庫 ,就可以使用VS自帶的測試工具,連同代碼,和數據訪問都可以進行測試。
兩種簡單的方法,一個是使用海量數據進行測試性能。一個是使用測試工具,比如mysqlslap等等等等。