|PostgreSQL中数据批量导入优化方法( 二 )
建议在批量导入数据之前禁用目标表中的所有触发器 , 并在导入完成后再启用它们 。 禁用所有触发器也会强制执行外键约束检查的系统触发器 。
ALTER TABLE <target table> DISABLE TRIGGER ALL
<批量导入数据…>
ALTER TABLE <target table> ENABLE TRIGGER ALL
使用多值INSERT
对于成批数据加载 , 运行数千个或数十万个INSERT语句可能是个糟糕的选择 。 因为查询优化器必须解析和准备每个单独的INSERT命令 , 然后进行所有约束检查 , 作为单独的事务运行并记录日志 。 而使用多值单个INSERT语句可以节省这些不必要的开支 。
INSERT INTO(
多值INSERT性能受现有索引的影响 。 建议在运行命令之前先删除索引 , 然后再创建索引 。
另一个需要注意的地方是PostgreSQL可用于运行多值INSERT的内存量 。 运行多值INSERT时 , RAM中必须容纳大量输入值 , 并且除非有足够的可用内存 , 否则该过程可能会失败 。
建议将设置effective_cache_size参数到50% , 并将shared_buffer设为机器的总内存的参数设为25% 。 为了安全起见 , 将导入划分为多条的多值INSERT , 每个语句的值不要超过1000行 。
使用COPY命令
建议使用PostgreSQL COPY命令从一个或多个文件导入数据 。 COPY针对批量数据导入会进行额外的优化 , 比运行大量INSERT语句甚至多值INSERTS的都要快 。
COPY[( column1>, … ,
使用COPY的还有很多的优势:
它支持文本和二进制文件导入;
本质上是事务性的;
它允许指定输入文件的结构;
它可以使用WHERE子句有条件地导入数据 。
运行ANALYZ
这与提高批量数据导入性能无关 , 但是强烈建议在批量导入之后立即在目标表上运行ANALYZE命令 。 大量的新导入的行将大大改变数据表中列中的数据分布 , 并且会使表的统计信息都过时 。 当用查询优化器使用过时的统计信息时 , 查询性能可能会非常慢 。 运行ANALYZE命令将确保更新统计信息 。
本文插图
总结
【|PostgreSQL中数据批量导入优化方法】对于数据库应用程序来说 , 可能并非每天都会进行批量数据导入 , 但是在运行时会对查询性能产生影响 。 这就是为什么有必要尽可能缩短导入时间 。 DBA可以最大程度地减少意外的事情之一就是在具有类似服务器规格和PostgreSQL配置的开发或准线上环境中进行性能测试并进行优化 。 每种数据加载方案都是不同的 , 最好尝试每种方法并找到最好最快的方法 。
推荐阅读
- 暗淡青春|一根数据线居然卖354元
- 数据|10分钟,做一份数据可视化分析报表
- 数据|2020中国大数据产业发展指数在京发布
- 智能|每日互动入选爱分析数据智能厂商全景报告,持续引领数据智能新风向
- 数据|7.41亿!汇客云发布国庆8天全国购物中心客流数据报告
- 猎云网|医疗大数据分析服务商“脉兴医疗”获树兰俊杰资本千万级投资
- 老年|国庆长假结束,高德地图大数据显示大家竟然爱去这些地方
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 旅游|小红书发布十一出行消费数据,“周边游”热度暴涨377%
- 数据|科大讯飞在遵义成立大数据公司,注册资本3000万人民币