我有一个定制的Ubuntu 11.04服务器与6磁盘软件RAID 10主驱动器。 在这上面,我主要运行一个PostgreSQL和其他一些从networking上传输数据的工具。 经常在几小时的正常运行时间之后,服务器开始落后于各种进程。 例如,login后可能需要10-15秒才能获得shell提示符。 top出现可能需要5-10秒。 ls可能需要一两秒钟。 当我看到顶部时,几乎没有CPU使用率。 PostgreSQL服务器使用相当多的内存,但不足以stream入交换。 我不知道该从哪里走,除了怀疑RAID10(我以前只有过软件RAID 1的)。 编辑:从顶部输出: top – 11:56:03 up 1:46, 3 users, load average: 0.89, 0.73, 0.72 Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 93.5%id, 6.2%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16325596k total, 3478248k used, 12847348k free, 20880k buffers Swap: […]
题: 有没有办法告诉Postgres(9.2)“将pg_xlog所有WAL文件合并回非WAL数据文件,然后删除所有成功合并的WAL文件? 我希望能够“强制”这一行动; 即checkpoint_segments或归档设置应该被忽略。 文件系统WAL缓冲区( pg_xlog )目录应该清空或者几乎清空。 如果pg_xlog目录使用的部分或全部空间被数据目录占用,那就好了; 我们的DBA已经要求文件(即数据目录,而不是sql)数据库备份,没有任何积压的WAL,但空间消耗不是问题。 在这个操作过程中接近零的WAL活动是一个很好的约束。 我可以确保数据库服务器在此过程中closures或不可连接(零用户生成事务负载)。 实质上,我希望Postgres临时忽略归档/检查点保留策略,并将所有WAL活动刷新到核心数据库文件,使pg_xlog与最近创build的数据库保持相同的状态 – 只有很less的WAL文件。 我试过的东西: 我知道pg_basebackup实用程序执行类似这样的事情(它会生成一个Postgres实例的数据目录的几乎所有WALs合并的副本),但是我们还没有准备好在我们所有的系统上使用它,因为我们还在testing复制设置; 我希望有一个更短期的解决scheme。 我已经尝试发出CHECKPOINT命令,但是他们只是回收一个WAL文件并将其replace为另一个(也就是说,如果他们执行任何操作;如果我在数据库空闲时间发出这些命令,它们什么也不做)。 pg_switch_xlog()同样只是强制切换到下一个日志段; 它不刷新所有排队/缓冲区段。 我也玩过pg_resetxlog工具。 这种工具types是做我想做的,但它的所有使用文档似乎表明,它破坏(而不是冲出事务日志,并进入主要数据文件)的部分或全部WAL数据。 这种印象是否准确? 如果不是,我可以在零WAL活动期间使用pg_resetxlog强制将所有排队的WAL数据刷新为非WAL数据? 如果答案是否定的,我怎样才能达到这个目标呢? 谢谢!
目前我正在为性能问题而烦恼,当我的数据库服务器处于“繁重”负载下时,所有的数据库查询都比正常情况下高出1000倍。 我有一台运行Ubuntu 12.04的服务器,并托pipe我的postgresql 9.2数据库。 服务器在Hetzner.de上,它是一个EX6s(32Gb ram的8核心氙气,以及使用ubuntus软件raid的RAID1设置中的两个3T硬盘)。 当我运行大量的查询(我经常在夜里完成)时,我发现几乎所有的CPU使用率都花在CPU I / O等待上。 我安装了新的文件监视器,似乎无法find任何可能是此CPU I / O等待根源的其他迹象,这显然是我的性能和吞吐量的瓶颈。 所以问题是,这个CPU I / O等待什么,等待什么? 我添加了所有的概述图表,我可以从下面的新文物中得到。 我忽略了什么? 必须有一个明显的瓶颈? 我应该在哪里下潜? 数据库服务器CPU使用率 – 告诉我有什么不对的错误https://rpm.newrelic.com/public/charts/cEdIvvoQZCr 数据库服务器负载平均值https://rpm.newrelic.com/public/charts/cMNdrYW51QJ 数据库服务器物理内存https://rpm.newrelic.com/public/charts/c3dZBntNpa1 数据库服务器磁盘I / O利用 – 你可以看到磁盘似乎并没有被非常多的使用(几乎没有) https://rpm.newrelic.com/public/charts/9YEVw6RekFG 数据库服务器networkingI / O(Mb / s) – networking是一个千兆位内部networking,所有通信都是在这个networking上进行的。 https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7 前五名数据库操作挂钟时间https://rpm.newrelic.com/public/charts/dCt45YH12FK 数据库吞吐量https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI 数据库响应时间https://rpm.newrelic.com/public/charts/fPcNL8WA6xx 更新: 做完sudo iostat -k 1我开始怀疑了。 我得到了很多这样的输出,我没有看到NR: Device: tps kB_read/s kB_wrtn/s kB_read […]
我正在准备开始使用PGBouncer,但是我不确定是否应该在我的数据库服务器或应用程序服务器上使用它。 如果它在应用程序服务器上,则必须有多个连接池,而应用程序服务器要共享一个中央连接池,但是必须重新为每个新查询重新创buildTCP连接,而不是同时进行池化(据推测)。 哪一种是使用像PGBouncer这样的连接外观的“正确”方式,而且我对每个连接的观点甚至有效? 注意: 对于那些绊倒这个问题,请参阅PgBouncer常见问题 (最后一个问题)。
我试图login到我的数据库,并得到这个错误… root@—:~# psql -U user database psql: FATAL: Peer authentication failed for user "user" 这是什么意思? 我很确定,我可以通过将同伴放入我的pg_hba.conf来解决这个问题,但我不确定是否应该这样做。
我运行initdb,试图用createuser -sdrP myuser创build一个新的超级用户 我得到的错误是 createuser: could not connect to database postgres: FATAL: semctl(3342342, 3, SETVAL, 0) failed: Invalid argument 在互联网上的任何地方我都找不到任何东西。 我试过卸载,删除数据目录,并再次尝试,但没有骰子。 我在我的智慧结束。 我正在运行FreeBSD 9.2-RELEASE-p10的监狱里面。 是的,我已经设置了allow.sysvipc = 1
我正在使用Amazon CloudFormation创build一个包含EC2和RDS的堆栈(Postgres 9.4.4,5gb,db.m1.small)。 RDS实例启动后立即启动备份。 如何阻止RDS在启动时将其备份? 这里是Postgres日志: 2016-01-12 22:23:31 UTC::@:[2435]:LOG: database system is ready to accept connections 2016-01-12 22:23:31 UTC::@:[2448]:LOG: autovacuum launcher started 2016-01-12 22:23:34 UTC::@:[2445]:LOG: checkpoint starting: immediate force wait flush-all 2016-01-12 22:23:34 UTC::@:[2445]:LOG: checkpoint complete: wrote 23 buffers (0.0%); 0 transaction log file(s) added, 0 removed, 0 recycled; write=0.005 s, sync=0.011 s, total=0.051 s; […]
我在谷歌做了一些阅读,我做的唯一的事情就是让自己感到困惑。 有些人说count()比较慢,有很多logging,有人说你可以caching数字甚至是使用sequence … 用最佳性能和最低cpu / ram使用情况来统计表中多行的最佳方法是什么? 我的意思是> = 500,000行。
我生成了一个21 MB左右的转储文件: pg_dump –format=tar –verbose –file=database.backup mydatabase 当我在Windows上导入这个文件时: pg_restore –dbname mydatabase –verbose database.backup 需要1个小时才能完成。 在Ubuntu 10.10 64位盒子上做同样的事,大约需要7个小时! 当然,我正在谈论相同的硬件规格(戴尔Studio XPS)。 相同的RAM,CPU等 在这两种情况下,我使用PostgreSQL 8.4.7的开箱即用configuration。 也许发行版的configuration是不同的…也许有些优化,只是Windows发行版在做什么? 额外信息:在Windows 7 – > NTFS上。 在Ubuntu 10.10 – > ext4上 当我做 pg_dump –format=tar –verbose –file=workspace/work/dumps/loaded.backup mydb 我只需要5秒钟! 如果我在一个空的新数据库上恢复: pg_restore –dbname mydb-2 –verbose workspace/work/dumps/loaded.backup 我只需要10秒。 (问题解决了?…差不多)似乎数据库的家伙使用不同的选项导出原始转储。 也许 – 插入选项? Windows和Ubuntu使用原始转储之间的巨大差异仍然困扰着我的思想。 对此有何想法?
我试图设置从SQL Server 2008 R2到PostgreSQL 9.1的单向事务复制。 我正在尝试PGNP OLE DB提供程序。 我可以成功创build一个订阅,事务确实复制到PG服务器。 我在订阅上使用了sync_type ='none',因为在其他情况下,包括SQL Server特定选项(SET ANSI_NULLS ON等)在内的模式似乎被发送到PostgreSQL,而后者将其locking。 这很好,我可以使用SSIS并复制我的整个数据库,包括数据。 我的问题是,我怎样才能以安全的方式做到这一点? 因为如果我只是运行一个SSIS包导出数据,然后添加订阅,交易可能会丢失。 例如SSIS将数据导出到PG。 X行更新。 复制开始。 在这种情况下,行X的更新不会在我手动同步,但复制后启动。 我无法运行复制,因为可能会发生其他错误。 什么是适当的程序在这里?