freebsd禁止按ctrl+alt+del重启系统

运行时设置:

sysctl hw.syscons.kbd_reboot=0

持久化设置:

将修改添加到/etc/sysctl.conf中

发表在 freebsd | 留下评论

自动生成PostgreSQL的语法帮助信息命令

1.下载PG源代码

2.运行configure

3.进入到src/bin/psql目录下

4.运行make sql_help.c

在当前目录下生成的sql_help.c和sql_help.h即是sql帮助信息。被用在psql \h命令中。

发表在 linux, pgsql | 留下评论

使用xmllint抽取xml内容

$ cat foo.xml
<emplist>
<emp no=”1″>
<ename>John</ename>
</emp>
<emp no=”2″>
<ename>Jack</ename>
</emp>
</emplist>
$ echo ‘cat //emplist/emp[@no="1"]/ename/text()’|
xmllint –shell foo.xml |
sed -n 3p
John

发表在 linux | 留下评论

linux中msdos与vfat的区别

msdos是fat16,已经比较少见,有较多限制

vfat是fat32,windows上比较常用

发表在 linux | 留下评论

腾讯PostgreSQL应用分享(PGCONF CN2013)

2013 PostgreSQL中国用户大会在2013年10月26,27两天在杭州举行,大会聚集了腾讯、斯凯、华为、去哪等国内使用PG的企业,一起分享使用PG的经验,交流遇到的问题。在大会上,我做了题为《腾讯在PG上的应用分享》的分享。在腾讯,PG主要用于数据分析,作为腾讯分布式数据仓库的补充。在分享中,介绍了腾讯分布式数据仓库(TDW),腾讯基于PostgreSQL的数据服务tPG,以及我们对PG应用未来的一些想法。以下是本次分享的主要内容:

提纲

 PG在腾讯应用概述

 基于PG的数据库服务tPG介绍

 PG应用未来规划

——————————–

PG在腾讯应用概述

 主要业务场景为OLAP数据分析

 大部分为内部系统,少量应用于对外服务

 作为TDW系统的补充而存在

 主要应用形式为业务使用TDW提供的tPG服务

 TDW团队负责机器、运营和技术支持

 业务提交申请即可使用

 PG与MySQL

 MySQL可以支撑,则优先使用MySQL

 MySQL不能满足,再考虑使用PG

——————————–

TDW为什么要引入tPG

 TDW应用推广遇到的挑战

 TDW离线分析,不能满足业务的结果库需求

 TDW没有标准的JDBC、ODBC接口,难以与商业工具对接

 TDW处理小数据、做update和delete效率低

 解决方案

 TDW不是万能的,不可能满足所有应用场景

 需要建设一套RDBMS ,作为TDW的补充

• 要方便用户迁移已有业务,做好有工具做迁移

• 要有标准的JDBC、ODBC接口

• 性能要好

• 功能容易扩展

——————————–

为什么选择PostgreSQL

 完善的DB功能

 SQL标准支持较好

 支持PL/pgSQL等多种过程语言

 支持视图、分析函数、CTE等高级特性

 OLAP性能超过MySQL

 复杂SQL性能高10倍+

 基于cost的SQL优化,调优手段更多

 部分索引,函数索引,cluster索引

 插件式的功能扩展

 已有访问Mysql、Redis、文本等外部数据源插件

 很容易开发访问TDW的插件

——————————–

TB级数据库备份与恢复

基于zfs快照技术

 速度快,对上TB的数据做快照耗时小于1秒

 占用空间小,新生成的快照几乎不占空间

 支持快照增量备份,支持快速rollback

——————————–

tPG使用的开源插件

 分区管理:基于pg_partman进行改造

 监控:check_postgres和pgBadger

 缓存预热:pgfincore

 实例间互相访问:dblink

 读取MySQL数据:mysql_fdw

 中文全文检索:zhparser

——————————–

tPG运营现状

 目前运营情况

 11套tPG实例 ,共约40台机器

 已用存储约30TB ,最大实例存储达5TB

 tPG在公司内的用总户数100人+

 没有因PG本身出过事故,用户评价积极

 业务类型

 对外:用户报表

 对内:TDW系统,30多个业务的报表系统、数据提取系统、 BI系统、营销系统等

——————————–

Postgres-XC

 PG单机版问题

 单机版PG存储和计算性能不能扩展

 管理多个单机版PG ,运维工作量大

 Postgres-XC试用情况

 Pgxc1.1版本,8个datanode节点的集群

 Insert性能比单机低很多,推荐使用copy

 读性能几乎与节点数成正比

 在高并发下,GTM成为瓶颈

 在一些异常情况下,系统表损坏

——————————–

PG应用未来规划

 为业务提供集群版PG-XC服务

 更丰富的应用场景

 地理信息(PostGis )

 机器学习与数据挖掘(Madlib )

 R统计分析(PL/R )

 …

 接入流程自助化

 将tPG服务云化,降低运维人工参与量

演讲内容下载:腾讯PostgreSQL应用分享

发表在 pgsql | 留下评论

PostgreSQL的pg_toast_2619及pg_statistic表损坏问题解决

pg_toast_2619这个表是pg_statistic系统表的toast扩展表,如果PG报错如下:

ERROR:  unexpected chunk number 1 (expected 0) for toast value 16703 in pg_toast_2619

表示pg_toast_2619表损坏,可能pg_statistic也损坏了。这时候可以对整个DB进行analyze,有可能可以修复。如果在analyse过程中还是报错,那么可以通过删掉现有统计信息数据,重新生成来解决:

 SQL |  copy |? 
  1. mydb=# delete from pg_statistic;
  2. mydb=# reindex table pg_statistic;&nbsp;
  3. mydb=# vacuum analyze;

参考连接:

http://comments.gmane.org/gmane.comp.db.postgresql.bugs/29506
http://www.spinics.net/lists/pgsql-admin/msg05911.html
发表在 linux, pgsql | 留下评论

java DNS缓存控制

最近在测试Postgres-XC,为了让客户端能够将连接分布到多个pgxc的coordinator上,我们使用DNS轮训的方式解析pgxc的域名。

今天发现是用JDBC在多线程访问pgxc时,dns轮训不起作用,貌似java对dns结果做了缓存。最终定位发现,java确实对dns有缓存机制,可以通过networkaddress.cache.ttl这个参数进行控制。这个参数的单位为秒,具体含义是:

  • 设置为-1,表示缓存永远有效
  • 设置为0,表示不使用缓存
  • 设置为n>0,表示缓存有效期为n秒

于此对应的,还有一个dns解析失败的缓存networkaddress.cache.negative.ttl。

设置方法有三种:

方法一:

在${JAVA_HOME}\lib\security\java.security中配置:

networkaddress.cache.ttl=value

方法二:

在jvm启动参数中设置-Dsun.net.inetaddr.ttl=value

方法三:

在代码里设置java.security.Security.setProperty(”networkaddress.cache.ttl” , “value”)

发表在 java, linux | 留下评论

文档转换工具pandoc

pandoc是一个非常强大的文档转换工具,支持将markdown、html、pdf、mediawiki、word等格式的转换。

之前一直想把TDW的wiki内容导出为pdf格式的,现在发现pandoc可以解决这个问题。

发表在 linux | 留下评论

LLVM新子项目OpenMP

LLVM官方博客昨天宣布了一个新的子项目:OpenMP。这是intel贡献给LLVM社区的一个开源项目,主页是:http://openmp.llvm.org/

LLVM现在功能越来越完善了。

发表在 linux | 留下评论

PostgreSQL窗口函数ERROR: cannot override frame clause of window xx

下面这个SQL会报这个错误:cannot override frame clause of window pkw:

 SQL |  copy |? 
  1. select first_value( pk ) OVER ( pkw ) FROM t&nbsp;
  2. WINDOW pkw AS ( PARTITION BY pk ORDER BY pk RANGE BETWEEN UNBOUNDED&nbsp;
  3. PRECEDING AND UNBOUNDED FOLLOWING );&nbsp;

而下面两种写法则不会:

 SQL |  copy |? 
  1. select first_value( pk ) OVER ( PARTITION BY pk ORDER BY pk RANGE BETWEEN&nbsp;
  2. UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t;&nbsp;
  3. select first_value( pk ) OVER ( pkw ) FROM t&nbsp;
  4. WINDOW pkw AS ( PARTITION BY pk ORDER BY pk );&nbsp;

如果把报错SQL微做调整,将OVER后面pkw的括号去掉,则SQL可以正确运行:

 SQL |  copy |? 
  1. select first_value( pk ) OVER pkw FROM t&nbsp;
  2. WINDOW pkw AS ( PARTITION BY pk ORDER BY pk RANGE BETWEEN UNBOUNDED&nbsp;
  3. PRECEDING AND UNBOUNDED FOLLOWING );&nbsp;

这是PG的一个bug,在4年前有人报过,Tom Lane的回复是:

It’s actually correct: the syntax with parens specifies copying

and modifying the named WINDOW definition, but you’re not allowed to

copy-and-modify a definition that has a FRAME clause.  (Why the spec

says that is beyond me; replacing the FRAME clause seems sensible

enough, but …) 

This isn’t terribly well explained in our docs, as far as I can

find at the moment.  The SELECT reference page mentions the rule

in the context of a dependent WINDOW-clause definition, but

doesn’t explain that OVER with parens acts the same way.

And maybe the error message wording could be improved. 

目前仍然没有修复,最近这个bug被我遇到了,如果有时间,准备提交一个补丁。

详细情况可以看这里

发表在 pgsql | 留下评论