我正在尝试运行 mysqldump 来创建数据库快照,我发现它会在中途随机停止,而不会报告任何错误。我的数据库相对较小(大约 100MB)并且使用的是 InnoDB。
我正在运行它:
mysqldump --force --single-transaction --quick --user myuser --password=mypass -h mydatabasehost mydb > /tmp/snapshot.sql
Run Code Online (Sandbox Code Playgroud)
检查退出代码报告 0。
我的版本是:mysqldump Ver 10.13 Distrib 5.1.52, for redhat-linux-gnu (i386)
我看过一些类似的帖子,甚至是官方的错误报告,但两种解决方案似乎都不适用。
如何让 mysqldump 获取完整的数据库快照?
编辑:我的数据库目前驻留在亚马逊的 RDS 上。
我正在尝试运行一个应该返回大约 2000 行的查询,但是我的 RDS 托管的 PostgreSQL 9.3 数据库给了我错误“内存不足详细信息:请求大小为 2048 时失败。”。
这意味着什么?我的实例有 3GB 的内存,那么什么会限制它足以用这么小的查询耗尽内存?
编辑:
SHOW work_mem;
"1024GB"
Run Code Online (Sandbox Code Playgroud)
我无法显示完整的 SQL,但它正在尝试执行数据透视。我有两个主表library和book,它们指向一条library记录。我的查询尝试为每个图书馆记录查找过去 12 个月中每个月最受欢迎的书,并将它们连接到结果查询集中的一个单独列中,例如:
library_id, month_1_book_id, month_2_book_id, month_3_book_id, ...
Run Code Online (Sandbox Code Playgroud)
Explain 显示了很多循环的结果:
explain
select * from myapp_library_get_monthly_popular
where id in (5495060, 5495059, 5495048)
Nested Loop Left Join (cost=3645798.54..3750412.91 rows=3 width=2980)
-> Nested Loop Left Join (cost=3645798.10..3750388.98 rows=3 width=2994)
-> Nested Loop Left Join (cost=3645797.66..3750365.05 rows=3 width=2976)
-> Nested Loop Left Join (cost=3645797.23..3750341.13 rows=3 width=2958)
-> Nested Loop Left …Run Code Online (Sandbox Code Playgroud) 如何估计在 PostgreSQL 中重新索引整个表所需的总时间?
我有一个大型 PostgreSQL 数据库,其主表有 1500 万行、100 列和 200 个索引。
我发现一个问题,经过一整夜的进程将数据加载到表中后,在加载结束后大约 3-6 小时内,对表的查询非常慢。然而,这些查询在加载后 6 小时后奇迹般地再次变快。
这种暂时的缓慢是否是由 Postgres 在后台更新索引引起的?如何加快此处理速度?我找不到任何控制这个的参数。
我正在考虑REINDEX加载结束后立即在桌子上运行 a ,但我不确定这需要多长时间,而且我担心它可能需要比原始加载更长的时间,并且只会恶化性能。
我的表存储了有关客户的数十个描述符,索引(其中许多是部分索引)用于加速用户运行的常规查询。
该数据库接近 1 TB,因此我很少将整个数据库加载到开发环境中。相反,我有一个复制几千条记录的脚本。
如何关闭 PgAdmin4 中的自动完成/帮助提示?他们快把我逼疯了。
每次光标移动和按键都会导致出现“正在加载...”覆盖层,它要么不显示任何内容,要么显示无用的“帮助”下拉列表,以防我想用一百个其他 SQL 之一替换我的 SELECT 关键字声明。
我已经扫描了“文件”->“首选项”选项,并禁用了我能找到的所有“自动完成”选项,但这并没有禁用它。
我COUNT(*)在 PostgreSQL 中有一个经常运行的查询,看起来像:
SELECT COUNT(*)
FROM customer
WHERE source_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
Run Code Online (Sandbox Code Playgroud)
此查询需要 30-60 秒来运行并搜索数百万条记录。
EXPLAIN ANALYZE 显示它正在执行顺序扫描,因此我创建了索引:
CREATE INDEX customer_by_source ON customer (source_id)
WHERE source_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
Run Code Online (Sandbox Code Playgroud)
但是,EXPLAIN ANALYZE仍然显示它正在执行顺序扫描并且没有使用索引。
如何加快此查询并使其使用索引?
编辑:我的 Postgres 版本是 9.3.3。该表有大约 2000 万条记录,在每个 source_id 之间平均分配,其中另外 5 条未包含在列表中。
postgresql performance index-tuning postgresql-9.3 postgresql-performance
有什么方法可以从中获得进度测量或剩余时间估计mongorestore吗?
我曾经mongodump导出一个压缩档案,它在大约一个小时内生成了一个 8GB 的文件并显示了一个进度条,现在我正在尝试将档案加载到单独的登台服务器上。但是,即使转储不包含任何索引,还原已经运行了 6 多个小时。
我的恢复命令很简单:
mongorestore --drop --gzip --archive=dumpfile
Run Code Online (Sandbox Code Playgroud)
从我读过的内容来看,mongorestore 的效率非常低,所以很长的恢复时间是一个常见的抱怨。但是,很高兴知道我是否需要再等几个小时而不是几天。
联机帮助页没有列出任何类似--progress选项的内容。有没有办法粗略估计剩余的恢复时间?
运行时:
REINDEX DATABASE CONCURRENTLY mydb;
Run Code Online (Sandbox Code Playgroud)
这可能需要几个小时,甚至几天,具体取决于数据库的大小,是否有办法粗略估计其进度?
我看到一些论坛帖子声称您可以使用如下查询来查询索引创建状态:
SELECT
now()::TIME(0),
a.query,
p.phase,
p.blocks_total,
p.blocks_done,
p.tuples_total,
p.tuples_done,
FROM pg_stat_progress_create_index p
JOIN pg_stat_activity a ON p.pid = a.pid;
Run Code Online (Sandbox Code Playgroud)
_done / _total 列与阶段相结合确实提供了粗略的进度百分比。但是,这仅列出当前更新索引的进度。它不会告诉您有多少其他索引正在等待更新,更不用说每个索引需要做多少工作了。
编辑:我尝试将 views 结合起来pg_index,其中列出了*_ccnew并发进程使用的临时索引,例如pg_stat_progress_create_index:
SELECT relname,
CASE WHEN blocks_total > 0 THEN (ci.blocks_done/ci.blocks_total::numeric*100)::int ELSE NULL END as blocks_percent,
i.*
FROM pg_class as pgc
inner join pg_index as i on i.indexrelid = pgc.oid
left outer join pg_stat_progress_create_index as ci on ci.index_relid = i.indexrelid
WHERE i.indisvalid = false; …Run Code Online (Sandbox Code Playgroud) 如何在 PostgreSQL 中对表进行索引,以便最小/最大查询尽快返回?
我有一个包含几亿行的大表。每行都有一个 source_id 和最后更新记录的日期。我想收集每个 source_id 的一些统计信息,特别是每个 source_id 的最小和最大日期范围。
所以我在我的表上创建了这个索引:
CREATE INDEX CONCURRENTLY mydata_source_last_updated_date ON mydata (source_id, last_updated_date ASC);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下命令查询每个源的最短日期时:
SELECT source_id, MIN(last_updated_date) FROM mydata GROUP BY source_id;
Run Code Online (Sandbox Code Playgroud)
查询大约需要一个小时才能完成。
对于这么大的表,即使有索引,这是否是正常的性能?我怎样才能减少这个查询时间?
我在磁盘故障的服务器上有一个大型 PostgreSQL 数据库。pg_dump由于磁盘错误,我无法运行。
我有另一台具有相同操作系统(Ubuntu 16.04)和相同版本的 PostgreSQL (9.5.6) 的服务器。如何将原始数据库文件复制到新服务器?我不在乎读取错误是否会损坏数据库的某些部分,因为我有识别和修复这些问题的方法,但是我需要先复制数据才能修复它。据我所知,读取错误并不多,但即使有一个也会停止 pg_dump。
关于这个主题的维基页面很少,它建议进行“文件系统级复制”,但没有提及如何实际执行此操作。
编辑:我使用 rsync 复制我的数据目录 ( /var/lib/postgresql/9.5/main) 和配置目录 ( /etc/postgresql/9.5/main)。运行sudo service postgresql start无错误新的服务器运行,但尝试通过连接sudo -u postgres psql的回报:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)
并且日志显示:
2017-05-23 15:13:08 EDT [14604-1] [unknown]@[unknown] LOG: incomplete startup packet
2017-05-23 15:13:08 EDT [14603-2] LOG: MultiXact member wraparound protections are now enabled …Run Code Online (Sandbox Code Playgroud) 我在 PostgreSQL 12 数据库中有一个包含数百万条记录的表,从 11 升级到 12 后,一些查询开始表现得很糟糕。他们从大约 1 秒缩短到大约 5 分钟。我尝试重建所有索引、清理以及所有常见的 Postgres 容易实现的目标,但性能仍然很糟糕。
这是查询:
SELECT id, activity_count
FROM user
WHERE (search_index) @@ (to_tsquery('pg_catalog.english', '''1234567890'':*') AND active = true
ORDER BY activity_count DESC LIMIT 101
Run Code Online (Sandbox Code Playgroud)
换句话说,找到与给定帐号匹配的所有活跃用户,并从最活跃到最不活跃进行排序。
此查询大约需要 5 分钟才能返回 2 条记录。有什么不对劲。
该列search_index是一个 tsvector,存储表的各个文本字段中的所有关键字(只是帐户编号、名称等)。
我为此列创建了一个 GIN 索引:
CREATE INDEX user_search_index_gin
ON public.user USING gin
(search_index)
TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)
我还有一个该active列的索引:
CREATE INDEX user_active
ON public.user USING btree
(active ASC NULLS LAST)
TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)
我有一个有序索引activity_count:
CREATE INDEX user_activity_count …Run Code Online (Sandbox Code Playgroud) postgresql statistics upgrade postgresql-12 query-performance
有什么方法可以找到 PostgreSQL 12-13 中索引上次创建或重新索引的时间吗?
该文档显示了一些标准视图,例如pg_stat_user_indexes跟踪索引的使用统计信息,但我找不到任何跟踪创建/更新统计信息的内容。
postgresql ×8
index ×3
performance ×2
backup ×1
index-tuning ×1
innodb ×1
metadata ×1
mongodb ×1
mongodb-3.4 ×1
mysql ×1
mysqldump ×1
optimization ×1
pgadmin-4 ×1
statistics ×1
upgrade ×1