我在Postgres数据库的SELECT查询中遇到速度问题.
我有一个表有两个整数列作为键:(int1,int2)这个表有大约7000万行.
我需要在这种环境中进行两种简单的SELECT查询:
SELECT * FROM table WHERE int1=X;
SELECT * FROM table WHERE int2=X;
Run Code Online (Sandbox Code Playgroud)
这两个选择在这7000万个中返回大约10,000行.为了尽可能快地工作,我考虑使用两个HASH索引,每列一个.不幸的是结果并不那么好:
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on lec_sim (cost=232.21..25054.38 rows=6565 width=36) (actual time=14.759..23339.545 rows=7871 loops=1)
Recheck Cond: (lec2_id = 11782)
-> Bitmap Index Scan on lec_sim_lec2_hash_ind (cost=0.00..230.56 rows=6565 width=0) (actual time=13.495..13.495 rows=7871 loops=1)
Index Cond: (lec2_id = 11782)
Total runtime: 23342.534 ms
(5 rows)
Run Code Online (Sandbox Code Playgroud)
这是其中一个查询的EXPLAIN ANALYZE示例.这需要大约23秒.我的期望是在不到一秒的时间内获得这些信息.
这些是postgres db config的一些参数:
work_mem = 128MB
shared_buffers = 2GB
maintenance_work_mem = 512MB
fsync = off
synchronous_commit = off …Run Code Online (Sandbox Code Playgroud) 我遇到了这个错误,其中CPU使用率达到极限,JBoss需要重启(java.lang.OutOfMemoryError: PermGen space).
我发现旧的JBoss版本的解决方案可以增加MaxPermSize.我想JBoss7也是如此.
为了不再遇到任何问题,哪个值足够好?有没有办法永久远离这个问题(比如让我们说使用像JRockit这样的其他虚拟机)?
获得:
An error has occurred:
Error connecting to the server: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)
设置database.yml与其他计算机上的应用程序设置相同.
如何设置以便我不需要硬编码的密码?
我可以使用PgAdmin-III查看db ok.
我宁愿没有密码,database.yml因为使用这个应用程序的其他机器没有/需要它,所以它似乎可能与我的Pg安装有关.
我想看看在实时Django应用程序上执行哪些查询,以及它们占用多少内存.我读过这pg_stat_activity对监视Postgres数据库很有用.
我查看了Postgres文档,但是我有一个非常简单的问题,似乎没有在那里得到解答.
我如何真正开始使用pg_stat_activity?我键入什么来使用它,我在哪里键入它?
我在pg生产模式下收到此错误,但它在sqlite3开发模式下工作正常.
ActiveRecord::StatementInvalid in ManagementController#index
PG::Error: ERROR: column "estates.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "estates".* FROM "estates" WHERE "estates"."Mgmt" = ...
^
: SELECT "estates".* FROM "estates" WHERE "estates"."Mgmt" = 'Mazzey' GROUP BY user_id
@myestate = Estate.where(:Mgmt => current_user.Company).group(:user_id).all
Run Code Online (Sandbox Code Playgroud) 我刚刚在我的Mac上安装了Postgres.app但它无法正常工作.我完成了安装,应用程序图标在菜单栏上,它说它正在侦听端口5432,但是,如果我尝试从命令行运行它会发生什么:
~ $ psql
zsh: correct 'psql' to 'sl' [nyae]? n
zsh: command not found: psql
Run Code Online (Sandbox Code Playgroud)
我之前通过Homebrew安装了PostgreSQL,但在安装Postgres.app之前删除了它.我正在运行Mac OS X Lion.
我感谢任何帮助,我真的希望在我的机器上运行PostgreSQL.
我有一张叫做的桌子 deposits
进行存款时,表格被锁定,因此查询类似于:
SELECT * FROM deposits WHERE id=123 FOR UPDATE
我假设FOR UPDATE是锁定表,以便我们可以操作它而无需另一个线程踩在数据上.
但是,当其他存款试图获取表的锁定时,会出现问题.发生的事情是,在锁定表格和调用psql_commit()某些东西之间的某个地方失败并保持锁定一段愚蠢的时间.我需要帮助解决一些问题:
尝试获取锁定的后续查询应该失败,我已经尝试实现此目的NOWAIT但是更喜欢超时方法(因为可以等待,只是不等待'愚蠢的时间')
理想情况下,我会在传递中关闭它,并让我的初始查询只保持一定时间的锁定,这可能与postgresql?
是否还有其他一些神奇的功能,我可以在查询上(类似于NOWAIT)只会在失败之前等待锁定4秒?
由于代码库令人痛苦的整体意大利面代码性质,它不仅仅是改变全局配置的问题,它有点需要是基于每个查询的解决方案
谢谢你的帮助,我会继续四处寻找,但我没有多少运气.这是psql的一个不存在的函数,因为我发现了这个:http://www.postgresql.org/message-id/40286F1F.8050703@optusnet.com.au
我正在努力解决管理非平凡数据模型的EJB3类的问题.当我的容器管理的事务方法提交时,我会抛出约束验证异常.我想阻止它们被包装EJBException,而是抛出一个理智的应用程序异常,调用者可以处理.
要将它包装在合适的应用程序异常中,我必须能够捕获它.大多数情况下,一个简单的try/catch来完成这项工作,因为验证异常是从EntityManager我所做的调用中抛出的.
不幸的是,一些约束仅在提交时检查.例如,@Size(min=1)只有在容器管理的事务提交时才会捕获对映射集合的违反,一旦它在我的事务方法结束时离开我的控件.在验证失败时,我不能赶上抛出的异常,敷,因此容器将其包装在一个javax.transaction.RollbackException和包装是在诅咒EJBException.调用者必须抓住所有EJBExceptions并在原因链中潜水,以试图找出它是否是验证问题,这真的不太好.
我正在使用容器管理的事务,所以我的EJB看起来像这样:
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER
class TheEJB {
@Inject private EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public methodOfInterest() throws AppValidationException {
try {
// For demonstration's sake create a situation that'll cause validation to
// fail at commit-time here, like
someEntity.getCollectionWithMinSize1().removeAll();
em.merge(someEntity);
} catch (ValidationException ex) {
// Won't catch violations of @Size on collections or other
// commit-time only validation exceptions
throw new AppValidationException(ex);
} …Run Code Online (Sandbox Code Playgroud) 我一直在试图建立的PostgreSQL我的系统上(OSX 10.8,干净的安装),但我遇到了麻烦,使用psql,createdb等等.我已经尝试了各种解决方案,并没有似乎工作.
安装成功,我继续使用以下方法修复已知的套接字问题:
mkdir /var/pgsql_socket
sudo chown $USER /var/pgsql_socket
Run Code Online (Sandbox Code Playgroud)
然后我编辑postgresql.conf,设置unix_socket_directory为
unix_socket_directory = '/var/pgsql_socket'
Run Code Online (Sandbox Code Playgroud)
并重新启动Pg.
这应该显然已经解决了套接字问题,但我仍然得到:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)
此外,我已经检查了服务器的状态,它似乎正在运行,但我仍然得到'没有这样的文件或目录'
有任何想法吗?
我在Mac上安装了Postgres93.我可以通过app打开应用程序和"打开psql",打开psql的命令行界面.
但是,当我输入$ which psql什么都没有返回.安装路径是/Applications/Postgres93.app.如何$ which psql显示正确的结果?
Mac OS X - Mavericks
PostgreSQL包,我不太确定.我去了这里下载了它 - http://postgresapp.com/
postgresql ×8
java-ee ×2
jboss7.x ×2
macos ×2
psql ×2
debugging ×1
eclipselink ×1
ejb ×1
heroku ×1
jboss ×1
jpa ×1
locking ×1
passwords ×1
performance ×1
pg ×1
production ×1
ruby ×1
sql ×1
webserver ×1