我想比较我的Web应用程序与两个不同的MySQL服务器的延迟:一个是本地机器,另一个是通过Amazon RDS托pipe的。
什么是一个好的,免费的,(最好)简单的工具来testingMySQL的延迟? 我有Windows和Linux的工作,所以这些工具至less应该运行在其中之一。
你希望测量什么types的延迟?
无论如何,这是非常简单的自制软件 – select一个你select的脚本库(python,perl,php等等),然后加载一个时序库。 在伪代码中,它看起来像这样:
timer.start() query.execute() timer.stop()
对各种服务器执行该操作,并检查延迟。
创build两个存储过程
安装这个数据库和存储过程
drop database if exists mybmark; create database mybmark; use mybmark DELIMITER $$ DROP PROCEDURE IF EXISTS `mybmark`.`testproc` $$ CREATE PROCEDURE `mybmark`.`testproc` () BEGIN DECLARE answer INT; SELECT 1+2 INTO answer; END $$ DELIMITER ; DELIMITER $$ DROP PROCEDURE IF EXISTS `mybmark`.`mybenchmark` $$ CREATE PROCEDURE `mybmark`.`mybenchmark` (loop_count INT,expr varchar(128)) BEGIN DECLARE dt1,dt2,dtdiff,ndx INT; SET dt1 = UNIX_TIMESTAMP(); SET ndx = loop_count; SET @sql = expr; PREPARE stmt FROM @sql; WHILE ndx > 0 DO EXECUTE stmt; SET ndx = ndx - 1; END WHILE; DEALLOCATE PREPARE stmt; SET dt2 = UNIX_TIMESTAMP(); SET dtdiff = dt2 - dt1; SELECT dt1,dt2,dtdiff; END $$ DELIMITER ;
存储过程mybmark.testproc只是执行一个expression式的SELECT。 你可以通过一个有131,072行的表来进一步testing这个基准testing。 然后,您可以进行一个查询,其目的很慢。
首先创build表并填充它将会有131072行
USE mybmark; CREATE TABLE mytable (A int) ENGINE=MyISAM; INSERT INTO mytable VALUES (1); INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable; INSERT INTO mytable SELECT A FROM mytable;
接下来将mytable mybmark计数添加到mybmark 。 testproc
DELIMITER $$ DROP PROCEDURE IF EXISTS `mybmark`.`testproc` $$ CREATE PROCEDURE `mybmark`.`testproc` () BEGIN DECLARE answer INT; SELECT COUNT(1) INTO answer FROM mybmark.mytable WHERE 1=1; END $$ DELIMITER ;
现在,打电话给mybmark 。 mybenchmark 10倍
call mybmark.mybenchmark(100,'CALL mybmark.testproc()'); call mybmark.mybenchmark(1000,'CALL mybmark.testproc()'); call mybmark.mybenchmark(10000,'CALL mybmark.testproc()'); call mybmark.mybenchmark(100000,'CALL mybmark.testproc()');
在MySQL本地计算机和Amazon RDS中执行所有这些步骤
我在2012年4月3日重新写了这个algorithm: https : //dba.stackexchange.com/a/16029/877
要根据比较的原因testingMySQL延迟,我会采用一些最常用的查询方式,并在本地和RDS数据库上运行它们,然后您将会看到两者之间的延迟差异。 这是因为延迟很大程度上取决于查询types和您要检索的数据量。
顺便说一下,这里是一个关于数据库延迟的有趣post ,而且,由于您使用的是RDS,因此在此云数据库站点中,您可以findRDS和另一个云数据库之间的延迟比较。 干杯:)