首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres:查询巨型索引(11 on )不返回

Postgres:查询巨型索引(11 on )不返回
EN

Database Administration用户
提问于 2017-07-18 22:04:24
回答 1查看 296关注 0票数 0

使用Postgres 9.6,我创建了一个435百万行的表,其大小为120 in,并添加了一个大小为11 in的索引。

现在我想迭代索引的不同值,但是查询失败了,没有错误,它只是没有完成。我可以看到没有cpu使用或内存正在使用。注:服务器位于aws rds上,内存为15 Nb。

如何最好地解决这个问题?使用LIMITOFFSET迭代它的尝试在大约3个周期后失败。我还没有得到索引中的一些唯一值。

我将尝试重新索引,看看是否确实有任何损坏,但任何建议使用一个11 if的索引将是很好的。

编辑以添加更多信息:

这是我桌子的格式

代码语言:javascript
复制
id bigint,
hit1 character varying(50),
hit2 character varying(50),
offset integer,
year character varying(50)

据postgres估计,行估计为4.31亿行,大约为115 to。

索引位于大小为11 of的hit1列上。

我试图计算点击数:

代码语言:javascript
复制
select hit1,hit2, count(distinct id) as total_count_of_ids,
count(case when offset=-1 then 1 else null end) as prev_position, 
count(case when offset=0 then 1 else null end) as same_position,
count(case when offset=1 then 1 else null end) as next_position, 
min(cast(substring(year,1,4) as int)) as min_year, 
max(cast(substring(year,1,4) as int)) as max_year,
array_agg( id) as id_list 
from table where hit1='' 
group by hit1, hit2;

由于桌子很大,我选择了这样一个接一个地做:

代码语言:javascript
复制
select distinct hit1 from table limit 250 offset x 
-- use above query to to store results into table. 

此函数包装在另一个函数中,该函数从循环中提供x。函数在dblink上下文中运行,这样就可以存储结果,并且我可以在执行过程中进行审计。

循环需要运行1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,我还没有得到一个计数的不同的hit1值,因为查询需要太长时间才能返回。前750个值(3次迭代)在每一分钟内返回迭代,但在下一次迭代中它会翻过来。当这个迭代结束时,我将提供日志数据。

当查询正在运行时(在计算不同列表时),cpu的使用率似乎很低。似乎也有一些内存不可用。

编辑2以显示结果:在函数中,我使用dblink进行审计。在前3个周期(0-2)之后,从表限制250偏移750中选择不同的hit1返回结果需要一个小时;与以前的hit1顺序相比,该顺序不按字母顺序排列,而且似乎返回或死亡只导致77次结果。

EN

回答 1

Database Administration用户

发布于 2017-07-19 09:52:13

我不知道我的答案是否准确,因为我们在你的问题中没有多少信息,但也许你应该考虑其中的一个线索:

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/180176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档