NpgsqlConneciton, NpgsqlCommand都有CommandTimeout属性值,单位为毫秒,默认值为90秒。如果命令执行时间超过CommandTimeout值,就会发生timeout错误,即执行时间超出设定时间。
创新互联公司是一家专注于成都网站设计、成都网站制作与策划设计,化隆网站建设哪家好?创新互联公司做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:化隆等地区。化隆做网站价格咨询:028-86922220
所以,解决方式就是将CommandTimeout值设置足够大。
PostgreSQL 近几年在全球的人气不断攀升,每年发布的版本都体现了社区的活力,9.6作为里程碑式的作品,更加有非常多的新特性加入。
例如
1. 多核并行计算
2. FDW 下推join, sort, where clause.
3. snapshot too old
4. 检查点平滑fsync
5. vacuum freeze加速
6. sharding base on fdw
7. 分词增强,支持相邻phrases搜索,据说比ES用起来还爽。
8. scale-up 多核增强, 72HT的机器tpc-b select only达到了180万的tps.
9. 推出等待事件统计信息
10. 支持多副本同步复制,满足金融级可靠性要求
11. 聚合复用SFUNC,多个聚合如果INIT和SFUNC一致的话,可以节约非常多的运算开销。
12. 事务idle超时机制
还有很多,可以在 release notes页面查找
除此之外,社区开发的一些特性也很吸引人,例如
1. rum插件,支持文本相似度查询,效率嘛10亿级别TOKEN,毫秒级响应,比搜索引擎还好用,具体见云栖社区的测试文章。
2. LLVM版本的PostgreSQL,对大数据量的表达式处理性能提升非常明显。也是大数据处理惯用的手法,例如Impala。虽然PostgreSQL的定位是OLTP,但不代表它不能处理OLAP的请求,而且Gartner去年就提出了HTAP的数据库概念,指即能处理TP有能处理AP的数据库产品,PostgreSQL的特性可见一斑。
3. 10.0版本已经加入的聚合算子下推,你是不是开始浮想联翩了呢?
更多的插件可以到github , pgxn.org , pgfoundry ,
引发 idle in transaction 的原因很多,例如应用代码中忘记关闭已开启的事务,或者系统中存在僵死进程等,曾经看到过某个库中的 idle in transaction 进程存在一年有余,这类进程严重危害了数据库的安全,例如它会阻止 VACUUM 进程回收记录,造成表数据膨胀,同时它有可能引起整个 PostgreSQL 数据库 Transaction ID Wraparound 的风险。
--修改 postgresql.conf 以下参数
idle_in_transaction_session_timeout = 20000
备注:参数单位为毫秒,这里设置 idle in transaction 超时空闲事务时间为 20 秒。
--重载配置文件
[pg96@db1 pg_root]$ pg_ctl reload
server signaled
备注:此参数修改后对当前连接依然生效,应用不需要重连即能生效。
--开启会话一:模拟一个事务
[pg96@db1 ~]$ psql francs francs
psql (9.6beta1)
Type "help" for help.
francs= begin;
BEGIN
francs= select 1;
?column?
----------
1
(1 row)
事务中,不提交也不回滚。
postgresql中可以使用pg_dump来备份数据库。pg_dump是用于备份PostgreSQL数据库的工具。它可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。
用法:
pg_dump [选项]... [数据库名字]
一般选项:
-f, --file=FILENAME output file or directory name
-F, --format=c|d|t|p output file format (custom, directory, tar, plain text)
-v, --verbose 详细模式
-Z, --compress=0-9 被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
--help 显示此帮助信息, 然后退出
--versoin 输出版本信息, 然后退出
示例:
备份数据库,指令如下:
pg_dump -h 164.82.233.54 -U postgres databasename C:databasename.bak
开始-运行-cmd 弹出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下:
cd C:Program FilesPostgreSQL9.0bin
最后执行备份指令:
pg_dump -h 164.82.233.54 -U postgres databasename C:databasename.bak
指令解释:
pg_dump 是备份数据库指令,164.82.233.54是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;
postgres 是数据库的用户名;databasename 是数据库名。
意思是导出到C:databasename.bak文件里,如果没有写路径,单单写databasename.bak文件名,那么备份文件会保存在C: Program FilesPostgreSQL9.0bin 文件夹里。
推荐学习《Python教程》。