相关疑难解决方法(0)

如何加快PostgreSQL中的插入性能

我正在测试Postgres插入性能.我有一个表,其中一列以数字作为数据类型.它上面也有一个索引.我使用此查询填充数据库:

insert into aNumber (id) values (564),(43536),(34560) ...
Run Code Online (Sandbox Code Playgroud)

我通过上面的查询一次非常快速地插入了400万行.数据库达到600万行后,性能每15分钟急剧下降到100万行.有没有提高插入性能的技巧?我需要在这个项目上获得最佳插入性能.

在具有5 GB RAM的计算机上使用Windows 7 Pro.

sql postgresql bulkinsert sql-insert

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

仅在内存中运行PostgreSQL

我想运行一个只在内存中运行的小型PostgreSQL数据库,用于我编写的每个单元测试.例如:

@Before
void setUp() {
    String port = runPostgresOnRandomPort();
    connectTo("postgres://localhost:"+port+"/in_memory_db");
    // ...
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将在版本控件中检查一个postgres可执行文件,单元测试将使用该版本控件.

有点像HSQL,但对于postgres.我怎样才能做到这一点?

我可以获得这样的Postgres版本吗?如何指示不使用磁盘?

postgresql unit-testing postgresql-performance

88
推荐指数
8
解决办法
7万
查看次数

Postgresql截断速度

我们正在使用Postgresql 9.1.4我们的数据库服务器.我一直在努力加快我的测试套件的速度,所以我盯着db稍微分析一下,看看到底发生了什么.我们使用database_cleaner在测试结束时截断表.是的我知道交易更快,我不能在某些情况下使用它们所以我不关心它.

我关心的是,为什么TRUNCATION需要这么长时间(比使用DELETE更长)以及为什么它在我的CI服务器上需要更长时间.

现在,在本地(在Macbook Air上)一个完整的测试套件需要28分钟.拖尾日志,每次我们截断表...即:

TRUNCATE TABLE table1, table2  -- ... etc
Run Code Online (Sandbox Code Playgroud)

执行截断需要1秒多的时间.在我们的CI服务器(Ubuntu 10.04 LTS)上记录日志,需要花费整整8秒才能截断表格,构建需要84分钟.

当我切换到:deletion策略时,我的本地构建花了20分钟,CI服务器下降到44分钟.这是一个显着的差异,我真的很惊讶为什么会这样.我已经调整 CI服务器上数据库,它有16GB系统RAM,4gb shared_buffers ......和一个SSD.所有好东西.这怎么可能:

一个.它比我的Macbook Air慢了2gb
.postgresql文档 明确指出它应该快得多时,TRUNCATION比DELETE慢得多.

有什么想法吗?

postgresql truncate database-performance

62
推荐指数
2
解决办法
3万
查看次数

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

我有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万
查看次数

如何区分 sqlalchemy INSERT…ON CONFLICT (Upsert) 中的冲突

我正在阅读有关 postgres 方言上的 upsert 操作的 SqlAlchemy 文档,网址为http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#insert-on-conflict-upsert

有没有办法知道更新插入是插入还是更新?

该文档似乎省略了这个细节。

python postgresql sqlalchemy

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

在Django中优化Postgresql数据库写入的性能?

我有一个Django 1.1应用程序,需要每天从一些大的json文件导入数据.为了给出一个想法,其中一个文件超过100 Mb并且有90K条目导入到Postgresql数据库.

我遇到的问题是导入数据需要很长时间,即数小时.我原以为将数量的条目写入数据库会花费一些时间,但肯定不会那么长,这让我觉得我在做一些内在错误的事情.我已经阅读了类似的stackexchange问​​题,并且提出的解决方案建议使用transaction.commit_manuallytransaction.commit_on_success装饰器分批提交,而不是每次都提交.save(),我已经在做了.

正如我所说,我想知道我做错了什么(例如批量生成太大了?太多的外键?......),或者我是否应该放弃Django模型来实现这个功能和使用DB API直接.任何想法或建议?

以下是我在导入数据时要处理的基本模型(为了简单起见,我删除了原始代码中的一些字段)

class Template(models.Model):
    template_name = models.TextField(_("Name"), max_length=70)
    sourcepackage = models.TextField(_("Source package"), max_length=70)
    translation_domain = models.TextField(_("Domain"), max_length=70)
    total = models.IntegerField(_("Total"))
    enabled = models.BooleanField(_("Enabled"))
    priority = models.IntegerField(_("Priority"))
    release = models.ForeignKey(Release) 

class Translation(models.Model):
    release = models.ForeignKey(Release)
    template = models.ForeignKey(Template)
    language = models.ForeignKey(Language)
    translated = models.IntegerField(_("Translated"))
Run Code Online (Sandbox Code Playgroud)

这里的代码似乎需要很长时间才能完成:

@transaction.commit_manually
def add_translations(translation_data, lp_translation):

    releases = Release.objects.all()

    # There are 5 releases
    for release in releases:

        # translation_data has about 90K entries
        # this is …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models

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

我们如何才能更快地进行Django测试?

我们在Ubuntu 12.04上使用Django 1.4和PostgreSQL.我们有很多测试,问题是运行测试非常慢,我认为因为每次测试都是从头开始创建数据库.我希望通过在内存中使用数据库(而不是硬盘)来加快测试速度.我该怎么做?你有任何链接或教程吗?

django postgresql django-testing in-memory-database django-tests

3
推荐指数
2
解决办法
4378
查看次数

如果在生产和开发中使用不同的RDBMS(例如PostgreSQL),SQLite何时不能用于在Django中进行测试?

即使您在开发和生产中使用另一个RDBMS(我使用PostgreSQL),本文也建议使用SQLite进行测试.我尝试了SQLite用于一个测试用例,它确实运行得更快(大约18.8倍,0.5秒对9.4秒!).

在哪些情况下可以使用SQLite导致不同的测试结果比我使用PostgreSQL?

只有我测试一段包含原始SQL查询的代码?

sqlite testing django postgresql

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