表很简单:
CREATE TABLE `t1` (
`ID` int NOT NULL AUTO_INCREMENT,
`name` int DEFAULT '1',
`LastName` int DEFAULT '0',
UNIQUE KEY `idx_ID` (`ID`) USING BTREE,
KEY `idx_name` (`name`)
) ENGINE=InnoDB;
DELIMITER $$
DROP PROCEDURE IF EXISTS populate_t1;
CREATE PROCEDURE populate_t1(IN num INT)
BEGIN
DECLARE COUNT INT DEFAULT 0;
WHILE COUNT < num DO
INSERT INTO t1(`name`,`LastName`) VALUES(round(rand()+5, 0), round(rand()*10000, 0));
SET COUNT = COUNT + 1;
END WHILE;
END $$
DELIMITER ;
CALL populate_t1(1000000);
CREATE INDEX idx_name ON t1 (`name`);
OPTIMIZE …
Run Code Online (Sandbox Code Playgroud) 我想弄清楚PostgreSQL在一段时间内等待锁所花费的时间(在这段时间内,PostgreSQL服务了很多请求)。
PostgreSQL 系统表pg_locks
显示一些信息。喜欢:
SELECT * FROM
pg_locks pl LEFT JOIN
pg_stat_activity psa
ON pl.pid = psa.pid;
Run Code Online (Sandbox Code Playgroud)
但是我仍然无法弄清楚它在锁上花费了多长时间。
我发现当我增加 PostgreSQL 的并发性时(例如,增加每个收集的并行工作线程数、最大并行工作线程数或其他一些配置),我的 100 秒多线程 TPC-C-like 工作负载变得更慢(即,更低的吞吐量)。所以我想弄清楚这是否是因为争用过多。
对于 SQL Server:如何在没有分析器的情况下查看查询花费了多长时间等待锁定?
performance ×2
concurrency ×1
index ×1
locking ×1
metadata ×1
mysql ×1
postgresql ×1
select ×1