08 2012 档案
摘要:因为研究线程的资源释放问题,从网上学习了程序,并进行了改写。看代码:#include<pthread.h> #include<stdio.h> #include<unistd.h>using namespace std;pthread_key_t key; void echomsg(void* p){ int t= *(int*)p; printf("destructor excuted in thread %d, param=%d\n ",pthread_self(),t); } void* child1(void* arg){ int
阅读全文
摘要:pgpool-II3.1 里面,有一些比较奇怪的做法,至少目前在我看来,是画蛇添足。如果你没有声明 begin transaction 和 end/commit/rollback 。当你执行一个SQL文的时候,如果事前没有 begin transaction 之类的,它会在你所执行的单一的 update/insert/delete SQL 执行前,后,分别追加 BEGIN 和COMMIT。虽然我认为这个追加是没有必要的,只要交给后台数据库就好了,但是还是先来探讨一下其实现机理。具体是如何实现的呢。看代码:start_internal_transaction 函数/* * Start an in
阅读全文
摘要:客户问: pgpool-II3.1 的log 里面,为何会有Unable to parse 的信息?但是相关的SQL文却正确执行了的。为了探究原因,对代码进行了分析。首先最重要的是:pgpool-II对SQL文的分析,并没有什么特别的意义。它对自己不能解析的SQL文,都要报这个信息。但是pgpool-II不能解析,并不代表数据库端就不能识别。说到这里,得说一下:pgpool-II里面对log信息/debug信息的安排比较随意,不是很严谨。如果我们用 PPAS版里自带的 pgpool-II, 和PPAS数据库打交道的话,就会发现:很多从Oracle数据库移植过来的SQL文,可以被PPAS识别。却
阅读全文
摘要:pgpool -f /usr/local/etc/pgpool.conf -D -d -n >file.log 2>&1 &
阅读全文
摘要:编译C语言多线程程序的时候,如果出现undefined reference to 'pthread_create'错误在编译中要加 -lpthread参数 g++ thread.c -o thread -lpthread或gcc thread.c -o thread -lpthread特此备忘
阅读全文
摘要:由于研究一段代码的时候,看到了 void *。故此进行了学习。看了http://www.doc88.com/p-894907672962.html 的说明,感觉写得太好了,已无话可说。故此备忘。
阅读全文
摘要:我运行测试后的结论是这样的:确实发生了内存泄漏。没有回收sqlca区域。因为,我修改了 /src/interfaces/ecpg/ecpglib/misc.c的代码后,#ifdef ENABLE_THREAD_SAFETYstatic voidecpg_sqlca_key_destructor(void *arg){ FILE *p1; p1=fopen("gaoecpg.1","w+"); fclose(p1); free(arg); /* sqlca structure allocated in ECPGget_sqlca */ ...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]接上文,情形D extract_string_tokens 调用 malloc ==27927== 24,630 (24,576 direct, 54 indirect) bytes in 3 blocks are definitely lost in loss record 100 of 100 ==27927== at 0x4A05E1C: ...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]接上文 情形C save_ps_display_args 调用 malloc ==27927== 1,602 (256 direct, 1,346 indirect) bytes in 1 blocks are definitely lost in loss record 92 of 100 ==27927== at 0x4A05E1C: malloc (vg_re...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]情形B read_startup_packet 调用 calloc ==27927== 594 (528 direct, 66 indirect) bytes in 11 blocks are definitely lost in loss record 85 of 100 ==27927== at 0x4A05140: calloc (vg_r...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]接上文,继续对pgpool-II3.1的内存泄漏进行分析。情形A extract_string 调用 strdup ==27927== 3 bytes in 1 blocks are possibly lost in loss record 3 of 100 ==27927== at 0x4A05E1C: malloc (vg_replace_mal...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]用valgrind来分析pgpool的执行,会看到有如下几种情形有可能产生内存泄漏:A extract_string 调用 strdup ==27927== 3 bytes in 1 blocks are possibly lost i...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]接上文,我个人认为,需要对内存泄漏区分两种情况:一个长期驻留内存的工具,它如果有内存泄露的可能性,需要分为以下两大类来进行讨论: 分类1 启动后,在运行中一旦因某种原因分配了内存,则一直存在,并且并不随着运行过程随意增加内存, 在此工具关闭时,有可能被释放,也有可能不被释放。 我们探讨的是 pgpool...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]客户报告,pgpool-II3.1有内存泄露问题。经过一段运行后,内存占用增加,一直得不到释放。这里,先说点题外话,作为开源软件,pgpool-II 固然得到了很多应用,也受到不少人的青睐。可惜它的代码并没有按照一般的工程学的方法来进行编制,这也是很多开源软件的通病。修改过于随意,导致不断重复出现各种错误。我的理解,一个好的软件产品,无论它是C语言还是Java或者C#,无论它是嵌入式还是其他.
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gmail.com]由于客户报告说 Weblogic 连接池的环境下用PPAS,WLS服务器的连接池出错后复位,发生了崩溃。为了验证到底是那个地方有问题,写了如下的测试代码。此处记载,作为备忘。 [作者 高健@博客园 luckyjackgao@gmail.com]回到上一级页面:PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页磨砺技术珠矶,践行数据之道,追求卓越价值
阅读全文
摘要:PostgreSQL 环境下生成大量测试数据的方法:create table a5(id integer);insert into a5 values(generate_series(1,1000000));
阅读全文
摘要:为了结合C3P0和PPAS进行测试,写了如下代码:连接池部分:Connections.javaimport java.beans.PropertyVetoException; import java.sql.Connection; import com.mchange.v2.c3p0.ComboPooledDataSource;public class Connections { private static ComboPooledDataSource ds = new ComboPooledDataSource(); static { ...
阅读全文
摘要:为了验证 连接JDBC程序后,获得RecordSet以后,数据库连接切断后会有什么状况出现,做如下测试:获得数据库连接、执行SQL文,得到Recordset,sleep一段时间,切断连接。程序继续运行测试用代码如下:import java.sql.*;import java.io.*;import java.lang.Thread;public class test01{public static void main(String[] args){ try{ Connection con; try{ Class.forName("com.edb.Driv...
阅读全文
摘要:近日,客户提出Java程序运行连接connection有误,因此开始了研究。由于很久不编写Java 程序,并且多数情况下需要用 Eclipse。此次为简单起见,只用Java 纯命令行进行调试:刚开始的时候,可以正常运行。后来,加入了classpath ,反而报错:Exception in thread "main" java.lang.NoClassDefFoundError: test01Caused by: java.lang.ClassNotFoundException: test01 at java.net.URLClassLoader$1.run(URLClass
阅读全文
摘要:借助于网上他人文章,研究 SO_KEEPLIVE 问题:http://www.iteye.com/topic/1118643client端加了 setsockopt 函数调用。看看能否在服务器端未启动时,或下线时候,一直等待两小时左右。#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> ...
阅读全文
摘要:在研究 pcp_child.c 中的代码的时候,看到 pcp_do_accept 函数中有如下代码:if (setsockopt(afd, IPPROTO_TCP, TCP_NODELAY, (char *) &on, sizeof(on)) < 0) { pool_error("pcp_child: setsockopt() failed: %s", strerror(errno)); ...
阅读全文
摘要:Pgpool-II带了很多的 pcp命令,据说有一个 什么 management server;所以就想研究一下。当初用 pg_md5命令:pg_md5 postgres得到一个乱七八糟的字符串:e8a48653851e28c69d0506508fb27fc5拷贝到了 pcp.conf 最后一行:postgres:e8a48653851e28c69d0506508fb27fc5启动pgpool以后,再开另外一个终端:pcp_pool_status -d 10 localhost postgres postgres ,会报告一堆各个后台数据库节点的信息。pcp_pool_status是一个独立的
阅读全文
摘要:valgrind为何 报 ecpg内存泄露错误?根据我的同事的研究成果:究其原因,全局变量 sqlca 由malloc形成,但是释放时是隐含的:ecpg_sqlca_key_destructor函数调用 free 进行释放。boolECPGconnect(int lineno, int c, const char *name, const char *user, const char *passwd, const char *connection_name, int autocommit){struct sqlca_t *sqlca = ECPGget_sqlca(); .......
阅读全文
摘要:真是原因到底是什么呢?由于 EXEC SQL CONNECT 而导致 valgrind 报告 内存泄露错误。那么在同一个程序里面,加入 EXEC SQL DISCONNECT 后,会如何呢?验证的结果是,依然如此,还是会说still reachable: 220 bytes in 1 blocks。进一步的分析会发现,即使没有 EXEC SQL CONNECT 或者 EXEC SQL DISCONNECT只要有对 sqlca 的引用,就会出被报告错误。 if(sqlca.sqlcode == 0){ exit(0);}而一个很单纯的程序,如果没有上述一段程序,就不会被 va...
阅读全文
摘要:客户说valgrind 报告 ecpg内存泄露,实际到底如何呢?用程序来进行验证:我的test.pc 程序:#include <stdio.h> #include <string.h> #include <stdlib.h> int tst_connectdb(const char *Uid,const char *Pswd,const char *Host,ch...
阅读全文
摘要:如果是在PPAS环境下,需要: ln -s /opt/PostgresPlus/9.1AS/lib/libpq.so /usr/lib/libpq.so.5 ln -s /opt/PostgresPlus/9.1AS/lib/libpgtypes.so.3 /usr/lib/libpgtypes.so.3 LD_LIBRARY_PATH=/opt/PostgresPlus/9.1AS/lib export LD_LIBRARY_PATH如果我们的程序原名 sample.pgc, 则可以分两步进行编译: ecpg -o sample.c sample.pgc gcc -o sample samp
阅读全文
摘要:main.c 中,有如下说明:/* * shmem connection info table * this is a three dimension array. i.e.: * con_info[pool_config->num_init_children][pool_config->max_pool][MAX_NUM_BACKENDS] ...
阅读全文
摘要:已开始,我以为:pool_process_context 里面的 proc_id是 其 进程ID。其实满不是那么回事:看Source:/* * Child process context: * Manages per pgpool child process context */ ...
阅读全文
摘要:接上文 pgpool-II的性能缺陷:前文已经说到,pgpool-II在replication mode状态下,是顺次而非并行执行SQL文给各个DB节点。从Source的角度,可以看到: SimpleQuery → pool_send_and_wait → send_simplequery_message/* * Process Query('Q') message * Query messages include an SQL string....
阅读全文
摘要:pgpool-II在运行在 replication mode的时候,性能低下。经过分析,发现无解:这是由pgpool-II的执行方式决定的。pgpool-II 刚开始运行的时候,就会开很多子进程,缺省值128。但是,每当客户端来一个请求,就会有一个子进程全权负责,别的子进程不插手。而在replication mode,该子进程需要和多个DB节点打交道:比如把客户端的SQL文,发送给每一个DB节点。在给各个节点发送SQL文的时候,如果想要效率高,要么开子进程或线程来并行。要么采用某种非阻塞方式向各个节点发请求。然而,pgpool-II的开发者,采用了效率最为低下的做法:顺次执行。就是说对第一个D
阅读全文
摘要:缺省的情况下,如果不做特殊处理,一个程序在终端运行时,如果按Ctrl+C,就会退出。如果不想被Ctrl+C 打扰,可以如此作:#include<signal.h> int main(){ signal(SIGINT, SIG_IGN); while(1){ sleep(20); }}
阅读全文
摘要:接上一篇,pgpool-II中是如何实现进程池的,自己实现线程池。可以正常运行。server端代码:con-server03.c#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/signal.h>#include<sys/wait.h>#inc
阅读全文
摘要:看了pgpool-II的代码后,对其扒皮抽筋,大体了解了其思路:首先有一般网络通信中使用的 scoket/bind/listen函数设置:/* * create inet domain socket */ static int create_inet_domain_socket(const char *hostname, const int port){ struct sockaddr_in addr; ...
阅读全文
摘要:接上回,socket通信,server与多客户端通信的文章。搞一个先fork一堆子进程出来,再一起监听的server,client程序不变。#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/signal.h>#include<sys/wait.h&g
阅读全文
摘要:对 health_check_period与healht_check_timeout,官方解释如下:health_check_periodThis parameter specifies the interval between the health checks in seconds. Default is 0, which means health check is disabled. You need to reload pgpool.conf if you change health_check_period.health_check_timeoutpgpool-II periodic
阅读全文
摘要:近日研究socket 通信,学习了如下的一篇文章:http://blog.csdn.net/dlutcat/article/details/1813933(向作者致敬)感觉很好,但还有一点不过瘾,就想着能否加点料:增加多个客户端,让他们一起和服务器端通信。为了区别各个客户端,把客户端里加入了识别自身hostname的一段。修改后的代码如下:server :#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<std
阅读全文
摘要:C语言 int 转String, 查了一些资料,都谈到了 itoa其实,在Linux下,itoa 不存在,至少stdlib.h里面是没有的。变通方式是:举例:int pd; pd=getpid(); char cpd[10]; sprintf(cpd,"%d",pd);
阅读全文
摘要:返回:Linux/Unix 索引页 sed ' 's/^M//g' winfile.txt > linxufile.txt 返回:Linux/Unix 索引页
阅读全文