相关疑难解决方法(0)

优化PostgreSQL以进行快速测试

我正在从SQLite切换到PostgreSQL,用于典型的Rails应用程序.

问题是PG的运行规格变得缓慢.
在SQLite上花了大约34秒,在PG上它是~76秒,这慢了2倍.

所以现在我想应用一些技术来使规范的性能与SQLite相提并论,而不需要修改代码(理想情况下只需设置连接选项,这可能是不可能的).

从头到尾有几件显而易见的事情是:

  • RAM磁盘(在OSX上使用RSpec进行良好设置会很好看)
  • 未记录的表(它可以应用于整个数据库,所以我没有更改所有脚本吗?)

你可能已经明白我不关心可靠性和其余的(DB在这里只是一次性的东西).
我需要充分利用PG并尽可能快地完成它.

理想情况下,最佳答案将描述这样做的技巧,设置和这些技巧的弊端.

更新: fsync = off + full_page_writes = off仅将时间减少到~65秒(〜-16秒).良好的开端,但远远没有34的目标.

更新2:尝试使用RAM磁盘,但性能增益在误差范围内.所以似乎不值得.

更新3:* 我找到了最大的瓶颈,现在我的规格和SQLite一样快.

问题是进行截断的数据库清理.显然SQLite在那里太快了.

为了"修复"它,我在每次测试之前打开一个事务并在结束时回滚它.

约700个测试的一些数字.

  • 截断:SQLite - 34s,PG - 76s.
  • 交易:SQLite - 17s,PG - 18s.

SQLite的速度提高了2倍.PG的速度提高4倍.

sql database postgresql performance database-tuning

196
推荐指数
2
解决办法
5万
查看次数

H2 postgresql模式似乎不适合我

您好我的应用程序访问Postgres数据库,我有许多预定义的查询(排名,分区,复杂的连接等)我对Postgres.现在我想用小测试数据对这些查询行为进行单元测试.所以我从H2/Junit开始.我发现大多数Postgres查询比如Rank,Partition,Complex case等更新等等.所以我想到使用H2 PosgreSQL兼容模式,认为所有的postgres查询都适用于H2,如果我错了请纠正我.

我按照H2文档说使用PostgreSQL模式,使用数据库URL jdbc:h2:〜/ test; MODE = PostgreSQL或SQL语句SET MODE PostgreSQL.

我启用模式使用SET MODE PostgreSQL,我试图触发一个涉及rank()的查询并在postgres中工作,但它不起作用H2.它给了我以下例外

Function "RANK' not found; in SQL statement
Run Code Online (Sandbox Code Playgroud)

请指导我是H2和数据库测试的新手.提前致谢.我正在使用H2 jdbc驱动程序来解决postgres查询,认为H2 Posgress兼容模式将允许我触发postgres查询.

java postgresql jdbc h2

19
推荐指数
1
解决办法
2万
查看次数

使用内存数据库进行单元测试

我有PostgreSQL数据库.它用于单元测试.

  • 我想加快测试速度,所以我想使用某种内存数据库(例如H2).
  • 我想转储数据库(从PostgreSQL)并将这样的转储导入到内存数据库中.

您对内存数据库的选择有什么建议吗?我希望该数据库与PostgreSQL兼容.

java testing postgresql unit-testing in-memory-database

6
推荐指数
1
解决办法
8186
查看次数

将postgres完全留在记忆中

我正在运行各种测试,这些测试在数据库中花费了大量时间.

我想把它全部保留在内存中并且不要触摸数据库,希望这会加快速度.就像使用sqlite3的内存中选项一样.我不需要持久性/持久性/诸如此类,测试后一切都会立即丢弃.

那可能吗?我尝试调整我的postgres内存相关变量(如下面的解决方案),但这似乎并没有影响它执行的db写入次数,我找不到任何看起来像'内存'选项的东西.

https://dba.stackexchange.com/questions/18484/tuning-postgresql-for-large-amounts-of-ram

postgresql

5
推荐指数
1
解决办法
1万
查看次数

如何在节点 pg 中设置 postgres 数据库和表

我想分享一个Noderepo,理想情况下它应该在通常的yarn install && yarn start.

但是,pg既不能连接SELECT到/从尚不存在的数据库和表。

这很麻烦,但目前需要这些前面的步骤:

  1. 获取 postgres; docker run --name my-postgres -e POSTGRES_PASSWORD={MY_PASSWORD} -p 5432:5432 -d --rm postgres:13.0
  2. 启动 psql; docker exec -it -u postgres my-postgres psql
  3. CREATE DATABASE MY_DB
  4. \connect MY_DB
  5. 粘贴以下 SQL 脚本以创建表
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  field_1 VARCHAR ( 50 ) UNIQUE NOT NULL,
  field_2 INT NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

因为我已经从泊坞窗获得的Postgres,是docker-componse合理的解决方案?我不太熟悉dockerfile,有没有其他选择?

在节点中初始化 postgres 数据库的最佳实践是什么? …

postgresql node.js node-postgres docker

5
推荐指数
1
解决办法
833
查看次数

maven开始postgres服务器

我正在为学校做一个项目,需要在maven项目中用postgresql替换hsqldb.

目前我们通过运行启动hsql Server

mvn exec:java -P hsqldb

据我所知,这会查找pom.xml中的hsqldb配置文件

<profile>
  <id>hsqldb</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>org.hsqldb.server.Server</mainClass>
          <arguments>
            <argument>-database.0</argument>
            <argument>db/name</argument>
            <argument>-dbname.0</argument>
            <argument>name</argument>
          </arguments>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

所以我需要使用postgres设置重新发布这部分,我已经添加了postgres作为依赖.

<mainClass>ServerClass</mainClass>
Run Code Online (Sandbox Code Playgroud)

是我最大的问题,因为我无法在postgresql jar中找到主服务器类

java postgresql hsqldb maven

1
推荐指数
1
解决办法
1559
查看次数