far*_*ace 6 php mysql performance
我需要一种简单的方法来测试SQL查询的速度.我不担心硬件差异,我基本上需要一个相对数字.
这就是我一直用PHP做的事情(模糊,但有效):
// CONNECT TO DB HERE
$sub = new YomoSubscription(95,783);
$t = microtime(TRUE);
// contains the SQL db call i'm testing
$fp = $sub->generateFingerprint();
echo microtime(TRUE)-$t;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,有时在初始连接/运行时,我的测试需要1.25秒.然而在随后的连接上需要0.004秒...... 为什么会这样?
我非常确定my.ini中的MySQL查询缓存是关闭的:
query_cache_size=0
Run Code Online (Sandbox Code Playgroud)
尝试使用SELECT BENCHMARK(次数,查询)
更多信息:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark
您的第一个查询可能会更慢,因为 MySQL 实际上是在第一个查询上访问磁盘,而不是在第二个查询上。
您的操作系统可能会在读取文件时将其缓存在内存中;因此,后续读取可能不需要实际访问磁盘,并且返回速度会更快。
根据经验,我通常会运行几次查询,并寻找一致性。通常情况下,第一次运行会花费数倍的时间,而第二次、第三次和第四次则花费大约相同的时间。这些后续运行可能更能代表您在实际生产系统上看到的性能——因为您的生产数据库应该将该数据保留在操作系统缓存中,而您的开发系统很少被访问。
最后,当谈到查询性能时,在大多数情况下,您应该在开发中快速通过,并在生产中监视慢速查询日志以查看哪些查询真正需要工作。
就以编程方式运行性能数据查询而言——采取多个样本,并使用中位数。但实际上,这并不能很好地代表您在生产中遇到的实际性能问题。