小编Tim*_* He的帖子

为什么低选择性列上的索引会损害查询性能

表很简单:

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)

mysql performance index select

2
推荐指数
1
解决办法
73
查看次数

测量 PostgreSQL 等待锁的时间

我想弄清楚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:如何在没有分析器的情况下查看查询花费了多长时间等待锁定?

postgresql performance concurrency metadata locking

1
推荐指数
1
解决办法
53
查看次数