Mysql 我的插入查询正在阻止我的选择查询。postgres服务器的CPU使用率高达100%
我正在对表使用select和insert查询。但是postgres的CPU使用率高达100%。如何优化它 表结构和查询如下Mysql 我的插入查询正在阻止我的选择查询。postgres服务器的CPU使用率高达100%,mysql,postgresql,Mysql,Postgresql,我正在对表使用select和insert查询。但是postgres的CPU使用率高达100%。如何优化它 表结构和查询如下 CREATE TABLE ad_request ( request_id bigserial NOT NULL, client_id integer DEFAULT 0, ad_type integer DEFAULT 0, ad_unit integer DEFAULT 0, host_url character varying(1
CREATE TABLE ad_request
(
request_id bigserial NOT NULL,
client_id integer DEFAULT 0,
ad_type integer DEFAULT 0,
ad_unit integer DEFAULT 0,
host_url character varying(150) DEFAULT NULL::character varying,
ip_address character varying(20) DEFAULT NULL::character varying,
referer character varying(350) DEFAULT NULL::character varying,
platform character varying(20) DEFAULT NULL::character varying,
browser character varying(20) DEFAULT NULL::character varying,
served_campaign_id bigint DEFAULT 0,
status character(1) NOT NULL DEFAULT 'N'::bpchar,
created_time timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT ad_request_pkey PRIMARY KEY (request_id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE ad_request
OWNER TO postgres;
SELECT served_campaign_id
FROM ad_request
WHERE client_id=1 AND ad_type=1 AND ad_unit=1 AND ip_address='192.168.1.1' AND created_time > current_timestamp - interval '24 HOUR';
INSERT INTO
ad_request(client_id,ad_type,ad_unit,host_url,ip_address,referer,platform,browser,served_campaign_id)
VALUES(?,?,?,?,?,?,?,?,?);
seelct查询的解释分析输出为
Seq Scan on ad_request (cost=0.00..52629.15 rows=1 width=8) (actual time=245.512..245.512 rows=0 loops=1)
Filter: ((client_id = 1) AND (ad_type = 1) AND (ad_unit = 1) AND ((ip_address)::text = '192.168.1.1'::text) AND (created_time > (now() - '24:00:00'::interval)))
Total runtime: 245.544 ms
(3 rows)
插入查询的输出为
Result (cost=0.00..0.02 rows=1 width=0) (actual time=0.092..0.094 rows=1 loops=1)
Total runtime: 0.198 ms
(2 rows)
以及从pg_stat_activity pga内部联接中选择*的输出pg_将pl锁定在pga上。procpid=pl.pid;是
datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start
| query_start | backend_start | client_addr | client_port | locktype | database | relation | page | tuple | virtualxid | tran
sactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted
-------+---------+---------+----------+----------+----------------------- ------------------------------------------------------------+---------+--------- ---------------
-------+-------------------------------+-------------------------------+-------------+-------------+------------+----------+----------+------+-------+------------+-----
----------+---------+-------+----------+--------------------+------+-----------------+---------
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 20916 | 10969 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 1262 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 1260 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 2671 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 2676 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | virtualxid | | | | | 1/1272802 |
| | | | 1/1272802 | 1307 | ExclusiveLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 20916 | 11042 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 2672 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
20916 | adtag | 1307 | 10 | postgres | SELECT * FROM pg_stat_activity pga inner join pg_locks pl on pga.procpid=pl.pid ; | f | 2015-04-01 06:00:27.700
012+00 | 2015-04-01 06:00:27.700012+00 | 2015-04-01 04:04:49.810039+00 | | -1 | relation | 0 | 2677 | | | |
| | | | 1/1272802 | 1307 | AccessShareLock | t
(9 rows)
当文档说明insert不阻止select时,这意味着select不需要insert使用的任何锁,因此insert可以在同时进行select时进行。由于创建的系统负载,许多插入操作仍然可能会减慢选择的速度,直到它们似乎无法运行。在这种情况下,需要更多的细节。描述你看到的行为。显示解释分析选择的输出。。。并解释分析插入。。。谢谢你的提问。如果他们没有完成,使用简单的解释而不是解释分析。将结果粘贴到这里。请将\copy SELECT*FROM pg_stat_activity internal join pg_locks的输出粘贴到psql中运行时格式为csv的标准输出,同时阻止查询。当您编辑问题以添加此信息时,请在此处进行注释,并记住使用{}按钮对其进行代码缩进!我已经添加了EXPLAIN-ANALYZE-INSERT和EXPLAIN-ANALYZE-SELECTWell的输出,那么它是如何阻塞的呢?这两个查询似乎都正常完成,pg_stat_活动中没有任何其他建议。SELECT必须使用顺序扫描,因为您根本没有任何索引。您的查询至少可以使用客户机id上的索引,但其他列或列的组合也可能有用。但这完全取决于你的数据,你必须自己测试。