测试 MySQL 延迟的工具

测试 MySQL 延迟的工具

我想比较我的 Web 应用程序与两个不同的 MySQL 服务器的延迟:一个是本地机器,一个通过 Amazon RDS 托管。

有什么好用的、免费的、(最好)易用的工具可以用于测试 MySQL 延迟?我同时使用 Windows 和 Linux,因此这些工具应该至少可以在其中一种上运行。

答案1

您希望测量哪种类型的延迟?

无论如何,这对于自制来说相当简单 - 选择一个你喜欢的脚本库(python、perl、php 等等),然后加载一个计时库。在伪代码中,它看起来像这样:

timer.start()
query.execute()
timer.stop()

针对各种服务器执行该操作并检查延迟。

答案2

创建两个存储过程

  • 一个运行您选择的查询
  • 对第一个存储过程进行基准测试

安装此数据库和存储过程

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刚刚执行了表达式的 SELECT。您可以通过拥有一个包含 131,072 行的表来进一步测试此基准测试。然后,您可以故意进行缓慢计数的查询。

首先创建表并填充 131,072 行

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到 中mybmarktestproc

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. mybenchmark10 次

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日写了这个算法:https://dba.stackexchange.com/a/16029/877

答案3

为了便于比较,为了测试 MySQL 延迟,我会选取一些您最常用的查询,并在本地和 RDS 数据库上运行它们,然后您就会知道两者之间的延迟差异。这是因为延迟很大程度上取决于查询的类型和您要检索的数据量。

顺便说一句,这是一个有趣的关于数据库延迟的帖子并且,由于您使用的是 RDS,因此云数据库您可以找到 RDS 和另一个云数据库之间的延迟比较。干杯 :)

相关内容