我想针对我的 PostgreSQL 数据库对一些 SQL 查询进行基准测试。有什么方法可以使用 SQL 查询时间psql
吗?
我想对包含我为 PostgreSQL 编写的用户定义函数的查询进行基准测试。有没有标准的方法来运行这样的基准测试?
我知道可以\timing
在 psql 提示符下打开计时,但理想情况下,我想要一个自动处理所有事情的脚本:运行查询几次,每次运行后清除 PostgreSQL 缓存(可能通过重新启动 PostgreSQL 的服务),并输出平均运行时间(使用的内存是一个加号)。
我刚刚查看了一些为8.4 之前的 PostgreSQL编写的旧代码,我看到了一些非常棒的东西。我记得以前有一个自定义函数可以做一些这样的事情,但我忘记了预先的array_agg()
样子。回顾一下,现代聚合是这样写的。
SELECT array_agg(x ORDER BY x DESC) FROM foobar;
Run Code Online (Sandbox Code Playgroud)
然而,曾几何时,它是这样写的,
SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC);
Run Code Online (Sandbox Code Playgroud)
所以,我用一些测试数据试了一下..
CREATE TEMP TABLE foobar AS
SELECT * FROM generate_series(1,1e7)
AS t(x);
Run Code Online (Sandbox Code Playgroud)
结果令人惊讶..#OldSchoolCool 方式要快得多:加速了 25%。此外,在没有ORDER 的情况下简化它,表现出同样的缓慢。
# EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Result (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 loops=1)
InitPlan 1 (returns $0)
-> Seq Scan on foobar (cost=0.00..104425.28 rows=6017728 width=32) (actual time=0.032..716.793 rows=10000000 loops=1) …
Run Code Online (Sandbox Code Playgroud) 我很久以前就听说有这个工具可以帮助您调整 mysql 设置以获得更好的性能,但我无法找到它。我知道我可以使用 ab for apache 来模拟高流量,它会生成一个慢日志。但是,如果它崩溃(已经发生并且处于生产模式),我不知道它为什么崩溃以及是否可以从配置中调整它。
我想为我的数据库 (MySQL) 获得一个运行 InnoDB 引擎的专用服务器。InnoDB容量中有这个选项,您可以在其中定义IOPS。假设我有一个 SATA 72K-RPM HDD,允许 100 IOPS。这是否意味着我的数据库每秒只能运行 100 个并发 SQL 查询,还是意味着在 1 秒内执行 100 个单个读取或写入?数据库如何处理在这样的硬件上启动的每秒 3000 次查询?我有点困惑,所以请为我解释一下。我想在我的专用服务器上执行 200 多个查询。
在我的公司中,我们有多个虚拟机托管 SQL Server 2008 R2,其中一些机器的性能与其他机器不同,有些是因为 Vmware 主机非常繁忙,有些是因为与 NAS 的连接速度较慢。
有没有一种方法可以在测试 SQL 数据库或其他已知的最佳实践中运行一些 SQL 代码,我可以用它在每个 VM 和基准/基准性能中运行一些性能测试,以便我可以在移动之前了解哪台机器的行为比其他机器更好那些机器到 Prod 或 UAT 环境?谢谢,大卫。
基本上我有两个标量 UDF 输出相同的数据,一个使用游标,一个使用递归 CTE。我想确定应该使用哪个并丢弃另一个;我更愿意根据实际性能数据做出这个决定。我也很好奇这两者之间有多大的区别。
如何对这些 UDF 的性能进行基准测试以确定哪个更快?
我想通过从日志文件重新执行真实查询来评估不同 MySQL 实例的性能。我知道像 mysqlslap 这样的工具会产生随机和自动生成的查询,但我更愿意用真实的查询来测试系统。
为了对新系统进行基准测试,我最好使用慢日志或一般日志收集所有查询,然后将查询重播到新系统。
应该可以过滤查询,例如我只想重放 SELECT 语句。我想知道是否存在积极维护的程序或最佳实践来实现预热或基准测试功能。
Percona 提供了几种似乎是为此目的而设计的工具。所有这些都已从当前的 Percona 工具包中删除。这些工具是:
使用 Debian Wheezy docker 容器可以轻松访问提供 pt-log-player 的旧 Percona Toolkit 版本。运行容器docker run -it --network="host" --name wheezy debian:wheezy /bin/bash
并在其中安装旧版本的工作原理:
apt-get update
apt-get install percona-toolkit mysql-client
Run Code Online (Sandbox Code Playgroud)
我也尝试过 percona-playback,但它似乎也没有得到非常积极的维护。这将是一个很棒的工具,但它几乎没有记录,而且我找不到仅过滤 SELECT 语句的方法,因为我不想运行其他 DML 语句。我只看到 Percona Server 提供了一个启用只读选项的标志,但这不适用于 vanilla MySQL 或 AWS RDS。
但是,我更愿意使用不依赖于未维护工具的程序。
有什么工具可以实现这一目标吗?过滤慢查询日志的最佳方法是什么?如何理智地重播查询?
当您被新店聘为 DBA 时,您将使用哪些重要工具来为 50 多个实例建立基线和实施基准?您的建议将不胜感激。
I'm trying to run the MySQL DBT2 Benchmark Tool, I have unzipped the archive and run the following commands:
./configure --with-mysql
make
make install
mkdir /tmp/dbt
datagen -w 3 -d /tmp/dbt --mysql
scripts/mysql/mysql_load_db.sh --path /tmp/dbt --mysql-path /usr/bin/mysql
scripts/run_mysql.sh --connections 20 --time 300 --warehouses 3
Run Code Online (Sandbox Code Playgroud)
But got the following output:
...
Stage 3. Starting of the test. Duration of the test 300 sec
STARTING DRIVER COMMAND: /root/dbt2-0.37.50.3/src/driver -d 127.0.0.1 -l 300 -wmin 1 -wmax 3 -spread 1 -w 3 -sleep …
Run Code Online (Sandbox Code Playgroud) 运行 SQL Server 2017,使用交互式REPL 客户端sqlcmd
如何获得查询执行的时间?
你可以在这里sp_BlitzErik在他的回答中展示这一点,
SQL Server Execution Times:
CPU time = 1859 ms, elapsed time = 321 ms.
Run Code Online (Sandbox Code Playgroud) 我目前有一个程序,通过创建临时表、填充表,然后将该数据合并到主表中来插入数据库。然后放下桌子并重新做一遍。我想知道如果我只是截断而不是删除和创建,速度差异是多少。
我有一个尚未升级的旧数据库(postgres 10.15)。一张有问题的表上有一些大型索引,其中一些索引已损坏并需要重新索引。由于它不在版本 12+ 上,我无法同时重新索引表(这意味着我需要非并发地执行此操作,这需要表写锁) - 所以我想知道如何进行一些粗略计算重新索引需要很长时间,这样我就可以计划一些维护。我的大部分研究最终都以“只使用 pg_stat_progress_create_index!(这在 10 中不可用)结束,或者人们只是说同时使用。
该表约为 200GB,索引有 7 个,每个索引 14GB(根据 pg_relation_size)。对于此任务,我可以在数据库上获得约 900M/s 的恒定读取速率。是否有一个简单的指标可以用来确定需要读取多少数据才能完全重新索引?
benchmark ×13
postgresql ×5
mysql ×4
performance ×3
sql-server ×2
aggregate ×1
array ×1
client ×1
drop-table ×1
index ×1
linux ×1
logs ×1
psql ×1
slow-log ×1
truncate ×1