11 2012 档案
摘要:http://oracle.chinaitlab.com/exploiture/527665.html
阅读全文
摘要:http://space.itpub.net/11893231/viewspace-683241
阅读全文
摘要:文摘http://www.databasejournal.com/features/oracle/article.php/2168341/Recompiling-PLSQL-Objects-using-DBMSDDL-package.htm
阅读全文
摘要:文摘:http://www.dba-oracle.com/t_oracle_execute_immediate.htm
阅读全文
摘要:开始SET serveroutput ON;DECLARE p_tab_name varchar2(20); cursor_name INTEGER; p_rows_del INTEGER;BEGIN p_tab_name := 'EMP_CPY'; cursor_name := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(cursor_name, 'DELETE FROM '||p_tab_name, DBMS_SQL.NATIVE); DBMS_OUTPUT.PUT_LINE('p_tab_name:'|| p_
阅读全文
摘要:http://www.docin.com/p-120300972.html写的太好了。向作者致敬。
阅读全文
摘要:参考用:http://mahmoudoracle.blogspot.com/2012/06/plsql-pragma-restrict-references.html#.ULaw7qw6NDQ
阅读全文
摘要:开始select * from user_objects where object_type in ('FUNCTION','PROCEDURE');查询代码内容:SELECT name,TEXT FROM user_source WHERE TYPE IN('PROCEDURE','FUNCTION') ;结束
阅读全文
摘要:开始如果对异常处理不正确,有可能会导致意想不到的结果。下面这个就是:先写两个存储过程 test01 和 test02:CREATE OR REPLACE PROCEDURE test01 ISv_id emp.empno%TYPE;BEGIN UPDATE emp SET ename='test01' WHERE empno=7369; /*this will raise no_data_found exception*/ SELECT empno INTO v_id FROM emp WHERE empno=12345; END;CREATE OR REPLACE PROCE
阅读全文
摘要:开始CREATE OR REPLACE PROCEDURE testIS PROCEDURE inner_test IS BEGIN DBMS_OUTPUT.PUT_LINE('I am inner'); END;BEGIN inner_test;END test;执行:BEGIN test;END;执行的结果:anonymous block completedI am inner结束
阅读全文
摘要:开始CREATE OR REPLACE PROCEDURE query_emp(p_id IN emp.empno%TYPE, p_name OUT emp.ename%TYPE, p_salary OUT emp.sal%TYPE)ISBEGIN SELECT ename,sal INTO p_name,p_salary FROM emp WHERE empno = p_id;END query_emp;生成完毕后,可以这样来执行:DECLARE g_name varchar2(20); g_salary NUMBER(4);BEGIN query_emp(7369,...
阅读全文
摘要:开始想要知道,是否在一条SQL执行完毕之后,有否机会在接下来的程序运行段看SQL%NOTFOUND的值。事实上,它立即跳到了异常段。SET SERVEROUTPUT ON;DECLARE v_ename emp.ename%TYPE; e_norecord EXCEPTION; PRAGMA EXCEPTION_INIT (e_norecord, -20001); err_num NUMBER; err_msg VARCHAR2(100);BEGIN SELECT ename INTO v_ename FROM emp where empno=3000; IF SQL%...
阅读全文
摘要:开始SET SERVEROUTPUT ON;DECLARE v_ename emp.ename%TYPE; e_norecord EXCEPTION; PRAGMA EXCEPTION_INIT (e_norecord, -20001); err_num NUMBER; err_msg VARCHAR2(100);BEGIN SELECT ename INTO v_ename FROM emp WHERE empno=3000; EXCEPTION WHEN OTHERS THEN err_num := SQLCODE; err_msg := SUBST...
阅读全文
摘要:开始set serveroutput on;DECLARE e_no_rows EXCEPTION; e_integrity EXCEPTION;BEGIN BEGIN RAISE e_no_rows; END;EXCEPTION WHEN e_no_rows THEN DBMS_OUTPUT.PUT_LINE('no rows exception');END;运行结果:anonymous block completedno rows exception结束
阅读全文
摘要:开始set serveroutput on;DEFINE p_deptno = 10DECLARE e_emps_remaining EXCEPTION; PRAGMA EXCEPTION_INIT (e_emps_remaining, -2292);BEGIN DELETE FROM dept WHERE deptno = & p_deptno; COMMIT;EXCEPTION WHEN e_emps_remaining THEN DBMS_OUTPUT.PUT_LINE('Cannot remove dept' || TO_CHAR(&...
阅读全文
摘要:./pgpool -a /pgpool/pool_hba.conf -f /pgpool/pgpool.conf -n > /pgpool/pgpool_gao.log 2>&1 &
阅读全文
摘要:pgpool-n -d > /tmp/pgpool.log 2>&1 &
阅读全文
摘要:出现两个选项都是要连接RHN,一个是直接连,一个是用proxy连。耗时很久。此时,强制关闭VM的电源。在属性里把Network由 Bridge Adapter 改为 NAT。重新启动。再出现对的选项里是走到 Setup Software Updates的时候,一个是连接到RHN,一个是不连。
阅读全文
摘要:开始代码块如下:BEGIN update emp_cpy set empno=3000 where deptno=20;END;执行后,再开一个session, 查询:SQL> select * from emp_cpy where deptno=20; EMPNO ENAME JOB MGR HIREDATE SAL COMM---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO---------- ...
阅读全文
摘要:开始DECLARE CURSOR emp_cursor IS SELECT empno, ename, dname FROM emp_cpy, dept WHERE emp_cpy.deptno=dept.deptno AND emp_cpy.deptno = 20 FOR UPDATE OF sal NOWAIT; emp_record emp_cursor%ROWTYPE;BEGIN LOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; FETCH emp_cu...
阅读全文
摘要:开始DECLARE CURSOR emp_cursor IS SELECT empno, ename, dname FROM emp, dept WHERE emp.deptno=dept.deptno AND emp.deptno = 20 FOR UPDATE OF sal NOWAIT; emp_record emp_cursor%ROWTYPE;BEGIN LOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; FETCH emp_cursor INTO e...
阅读全文
摘要:开始SET SERVEROUTPUT ON;DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor (p_deptno NUMBER,p_job VARCHAR2) IS SELECT empno,ename FROM emp WHERE deptno=p_deptno AND JOB=p_job; emp_record emp_cursor%ROWTYPE; BEGINLOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor...
阅读全文
摘要:开始DECLARE CURSOR emp_cursor IS SELECT empno,ename,deptno FROM emp;BEGIN FOR emp_record IN emp_cursor LOOP IF emp_record.deptno=30 THEN dbms_output.put_line(emp_record.empno ||'...'||emp_record.ename); END IF; END LOOP;END;在这里,对cursor的打开、fetch、关闭等都是隐藏的。运行结果:anonymous block completed749...
阅读全文
摘要:开始SET SERVEROUTPUT ON;DECLARE TYPE emp_record_type IS RECORD ( empno emp.empno%TYPE, empname emp.ename%TYPE); emp_record emp_record_type; BEGIN emp_record.empno:=10; emp_record.empname:='TEST'; dbms_output.put_line('empno: '||emp_record.empno ||' empname: ' || emp_record.empn
阅读全文
摘要:开始SET SERVEROUTPUT ON;DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor IS SELECT empno,ename from emp where empno<>1000; emp_record emp_cursor%ROWTYPE; BEGINLOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; FETCH emp_cursor INTO emp_record; ...
阅读全文
摘要:开始rowcount 并不是定义或open了cursor,就是固定的值,它随着每次fetch而累计:--INDEX BY TableSET SERVEROUTPUT ON;DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor IS SELECT empno,ename from emp where empno<>1000; BEGINLOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; FETCH e...
阅读全文
摘要:开始SET SERVEROUTPUT ON;DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor IS SELECT empno,ename from emp where empno<>1000; BEGINLOOP IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; FETCH emp_cursor INTO v_empno,v_ename; EXIT WHEN emp_cursor%NOTFOUND...
阅读全文
摘要:开始--INDEX BY TableSET SERVEROUTPUT ON;DECLARE TYPE enm_tab_type IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; enm_table enm_tab_type;BEGIN SELECT * INTO enm_table(1) FROM emp WHERE empno=7900; SELECT * INTO enm_table(2) FROM emp WHERE empno=7902; END;/要注意的是:s...
阅读全文
摘要:开始DELETE(n) 指代的是 删除下标为n 的元素,那么对于下标不连续的情形,会如何呢?--INDEX BY TableSET SERVEROUTPUT ON;DECLARE TYPE enm_tab_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; enm_table enm_tab_type;BEGIN enm_table(1):='1001'; enm_table(2):='1002'; enm_table(3):='1003'; enm_table(4):='10
阅读全文
摘要:开始--INDEX BY TableSET SERVEROUTPUT ON;DECLARE TYPE enm_tab_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; enm_table enm_tab_type;BEGIN enm_table(1):='1001'; enm_table(2):='1002'; enm_table(3):='1003'; enm_table(4):='1004'; enm_table(6):='1006'; dbms_
阅读全文
摘要:开始--INDEX BY TableSET SERVEROUTPUT ON;DECLARE TYPE enm_tab_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; enm_table enm_tab_type;BEGIN enm_table(1):='ABCD'; IF enm_table.EXISTS(1) THEN dbms_output.put_line( enm_table(1)); ELSE dbms_output.put_line( 'not exists(1)...
阅读全文
摘要:开始DECLARE v_cnt NUMBER:=0; v_out_ext BOOLEAN:=FALSE; v_in_ext BOOLEAN:=FALSE;BEGIN <<Outer_loop>> LOOP EXIT WHEN v_cnt>20; <<Inner_loop>> LOOP dbms_output.put_line(v_cnt); v_cnt:=v_cnt+1; IF v_cnt>5 THEN v_in_ext:=TRUE; ...
阅读全文
摘要:开始DECLARE v_lower NUMBER :=1; v_upper NUMBER :=10;BEGIN FOR i IN v_lower .. v_upper LOOP dbms_output.put_line('i is: '|| i); END LOOP;END;要注意,i 并没有进行事前定义。运行的结果是:anonymous block completedi is: 1i is: 2i is: 3i is: 4i is: 5i is: 6i is: 7i is: 8i is: 9i is: 10结束
阅读全文
摘要:开始&加变量,为的是在运行前给出提示,要求用户输入数据。看例子:DECLARE v_grade CHAR(1) := UPPER( '&grade'); v_app VARCHAR2(20); BEGIN v_app := CASE WHEN v_grade='A' THEN 'Excellent' WHEN v_grade='B' THEN 'Very Good' ELSE 'No such grade' END; DBMS_OUTPUT.put_line('Grade:&
阅读全文
摘要:开始VARIABLE rows_deleted varchar2(30)DECLARE v_empno emp_cpy.empno%TYPE:=7900;BEGIN DELETE FROM emp_cpy WHERE empno=v_empno; :rows_deleted:=(SQL%ROWCOUNT || 'row deleted.');END;/PRINT rows_deleted运行结果:anonymous block completedROWS_DELETED-------------1row deleted.结束
阅读全文
摘要:开始PL/SQL 的培训例子有问题。我的验证如下:SQL> select empno, ename from emp_cpy; EMPNO ENAME ---------- ---------- 7900 gaoxx 7902 jianxx SQL> SQL> select empno, ename from emp; EMPNO ENAME---------- ---------- 7369 SMITH 7499 ...
阅读全文
摘要:开始set serveroutput on; DECLARE v_ename emp.ename%TYPE; BEGIN select ename into v_ename from emp where empno=7369; dbms_output.put_line('ename is:'||v_ename); END;结束
阅读全文
摘要:开始set serveroutput on;<<outer>> DECLARE birthdate DATE; BEGIN birthdate:=TO_DATE('2012-05-18','YYYY-MM-DD'); DECLARE birthdate DATE; BEGIN birthdate:=TO_DATE('2012-01-15','YYYY-MM-DD'); dbms_output.put_line('inner date is:' || birthdate); dbms_ou..
阅读全文
摘要:开始学习网上文章:http://blog.csdn.net/linwaterbin/article/details/7823519我自己所作的实验。首先根据网络上搜索的结论,DBWR会在如下几种情况下写数据:什么时候dbwr会把数据写入数据文件呢?下面这几种情况:1.当Buffer Cache中的Dirty List长度达到阀值:DBWR将Dirty List中的Dirty Buffer写入磁盘(userServerProcess在LRU List中查找free buffer时将碰到的dirty blocks移入Dirty List)2.当user Server Process在Buffer
阅读全文
摘要:开始set serveroutput ondefine p_annual=6000declare v_sal number(7,2):=&p_annual;begin v_sal := v_sal/12; dbms_output.put_line('the monthly salary is ' || v_sal);end;script output 窗口可以看出:anonymous block completedthe monthly salary is 500结束
阅读全文
摘要:开始set serveroutput on;define s_annual=500;begin dbms_output.put_line (&s_annual);end;script output窗口输出:anonymous block completed500结束
阅读全文
摘要:开始在oracle11g 中,已经没有 i*sqlplus了, 但是仍然有 Oracle SQL Developer。可以这样作:在sql worksheet 中,按如下的写法来做:set serveroutput on;variable g_month number;set verify off;begin :g_month:=1;end;/print g_monthscript output 窗口中得到结果:anonymous block completedG_MONTH-1结束
阅读全文
摘要:开始在 sql worksheet 中,执行一个 block 之前,执行 set serveroutput on;set serveroutput on;declare g_salary number:=100;begin select salary into g_salary from employees where employee_id=178; dbms_output.put_line('the salary is:'|| g_salary);end;script out 窗口中输出:anonymous block completedthe salary is:7000
阅读全文
摘要:开始从网络学习文章:http://blog.csdn.net/zhangmenghao1983/article/details/5185591我自己的实验:SQL> select dbtimezone, sessiontimezone from dual; DBTIME ------ SESSIONTIMEZONE ---------------------------------------------...
阅读全文
摘要:开始SQL> alter user scott account unlock;User altered.SQL> alter user scott identified by scott;User altered.SQL> 结束
阅读全文
摘要:开始比如说我已经做好了对分区表的规则:postgres=# CREATE OR REPLACE FUNCTION ptest_insert_trigger() RETURNS TRIGGER AS $$ postgres$# postgres$# BEGIN postgres$# postgres$# IF ( NEW.id <5000000 ) THEN postgres$# INSERT INTO ctest01 VALUES (NEW.*);postgres$# ELSIF ( NEW.id >= 5000000 ) THEN postgres$# ...
阅读全文
摘要:开始我有一个表,大约有一千万条记录,当我运行一个insert 命令向另一个表插入数据时,由于约束和索引的存在,导致插入数据很慢。但是这也给了我一个机会,来观察 explain plan 是如何处理数据的。postgres=# create table ptest(id integer, name varchar(20));CREATE TABLEpostgres=# create table ctest01(CHECK(id<5000000)) inherits (ptest);CREATE TABLEpostgres=# create table ctest02(CHECK(id>
阅读全文
摘要:开始PostgreSQL 到目前为止,是不支持原生的分区表的,看看它如何实现:http://www.postgresql.org/docs/current/static/ddl-partitioning.html要实现分区,需要借助继承与规则。postgres=# create table ptest(id integer, name varchar(20));CREATE TABLEpostgres=# create table ctest01(CHECK(id<5000000)) inherits (ptest);CREATE TABLEpostgres=# create table
阅读全文
摘要:开始VARIDIC,可以使用变参。例子:postgres=# CREATE or replace FUNCTION gao_concat(VARIADIC param_args text[]) RETURNS text AS$$ SELECT array_to_string($1,'*');$$LANGUAGE SQL;CREATE FUNCTIONpostgres=# postgres=# SELECT gao_concat('My', 'dog', 'likes', 'chocolate') As result
阅读全文
摘要:开始 生成数组下标值: 再看一个 postgresql 的官方例子: http://www.postgresql.org/docs/8.4/static/xfunc-sql.html 对其中的 SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i
阅读全文
摘要:开始用 第二个参数连接数组元素,例:postgres=# select array_to_string (ARRAY[1,2,3],'##'); array_to_string ----------------- 1##2##3(1 row)postgres=# 结束
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页[作者:高健@博客园 mail:luckyjackgao@gmail.com]select chr(int4(random()*26)+65);postgres=# select chr(int4(random()*26)+65); chr ----- N(1 row)postgres=# select chr(int4(random()*26)+65); chr ----- Y(1 row)postgres=# select chr(int4(...
阅读全文
摘要:磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页[作者:高健@博客园 mail:luckyjackgao@gmail.com]根据向网络牛人发问整理得到: random_page_cost = 4 seq_page_cost = 1 cpu_tuple_cost =0.01 cpu_index_tuple_cost =0.005 cpu_operator_cost =0.0025postgres=# select relpages, reltup...
阅读全文
摘要:开始伪代码如下:for (i = 0; i < length(outer); i++) for (j = 0; j < length(inner); j++) if (outer[i] == inner[j]) output(outer[i], inner[j]);就是个双层循环。实际运行一下:建表:postgres=# CREATE TEMPORARY TABLE sample1 (id, junk) ASpostgres-# SELECT oid, repeat('x',250)postgres-# FROM pg_procpostgres-# ORDER BY
阅读全文
摘要:PL/SQL 开发的时候,很多时候我们手头没有跟踪调试的工具。这是要想调试该如何处理呢?可以考虑:把代码片段分割成足够小的单位。再把这些片段复制到各个小的函数里。用一个pl/sql 函数或存储过程,全面 调用各个小的函数单位。可以方便地得到结果。达到类似 自动化 unit 测试的效果。
阅读全文
摘要:开始参考momjian 的文章:http://momjian.us/main/writings/pgsql/optimizer.pdf首先,构造一个数据分布明显倾斜的表(有的值占据了70%以上的分布)postgres=# CREATE TEMPORARY TABLE sample (letter, junk) ASpostgres-# SELECT substring(relname, 1, 1), repeat('x', 250)postgres-# FROM pg_classpostgres-# ORDER BY random();SELECT 291postgres=#
阅读全文
摘要:开始order by random() ,相当于不是根据某个字段来排序,而是乱序。这个方法可以帮助制造混乱分布的测试数据。postgres=# \d employee Table "public.employee" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) | deptno | integer ...
阅读全文
摘要:开始伪代码:http://momjian.us/main/writings/pgsql/optimizer.pdfsort(outer); sort(inner); i = 0; j = 0; save_j = 0; while (i < length(outer)) { if (outer[i] == inner[j]) output(outer[i], inner[j]); ...
阅读全文
摘要:开始首先,要安装 auto_explain:进入 contrib/auto_explain 目录,运行 gmake ,然后运行 gmake install然后编辑 postgresql.conf ,加入如下两行:shared_preload_libraries = 'auto_explain'auto_explain.log_min_duration='0'再在postgresql.conf 中设置log:# - Where to Log -log_destination = 'csvlog' # Valid values are combina
阅读全文
摘要:开始PostgreSQL 名人 momjian 的文章指出了其pseudo code:for (j = 0; j < length(inner); j++) hash_key = hash(inner[j]); append(hash_store[hash_key], inner[j]);for (i = 0; i < length(outer); i++) hash_key = hash(outer[i]); for (j = 0; j < length(hash_store[hash_key]); j++) if (outer[i] == hash_store[hash_
阅读全文
摘要:开始我个人的理解,当 where 条件出现 or 或者 and 之类,有可能产生这种状况:postgres=# explain analyze select id,deptno from gaotab where id=100 or id=300; QUERY PLAN ---------------------------------------------------...
阅读全文
摘要:开始所谓index only scan ,就是因为 建立 index时,所包含的字段集合,囊括了我们 查询语句中的字段,这样,提取出相应的 index ,就不必再次提取数据块了。例子:postgres=# \d gaotab; Table "public.gaotab" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) |...
阅读全文
摘要:开始数据量很小的时候,我们可以看到,seq scan 比 index scan 更加有效。那是因为 index scan 至少要发生两次I/O,一次是 读取索引块, 一次是读取数据块。当index 很大的时候,情况可能会更加复杂。postgres=# select a.relpages, a.reltuples, a.relfilenode,a.reltype,b.typname from pg_class a, pg_type b where a.relname like 'gaotab%' and a.reltype=b.oid; relpages | reltuples
阅读全文
摘要:开始ctid 和 物理存储有关,指的是 一条记录位于哪个数据块的哪个位移上面。postgres=# select ctid, * from gaotab; ctid | id | name | deptno | age ---------+-----+--------+--------+----- (0,1) | 1 | gao | 10 | 30 (0,2) | 2 | jian | 11 | 35 (0,3) | 3 | tom | 11 | 30 (0,4) | 4 | nam04 | 1...
阅读全文
摘要:开始table 的状况:[作者:技术者高健@博客园 mail:luckyjackgao@gmail.com]postgres=# analyze gaotab;ANALYZEpostgres=# select a.relpages, a.reltuples, a.relfilenode,a.reltype,b.typname from pg_class a, pg_type b where a.relname like 'gaotab%' and a.reltype=b.oid; relpages | reltuples | relfilenode | reltype | ty
阅读全文
摘要:开始csv 文件的内容:id name departno age1 gao 10 302 jian 11 353 tom 11 30导入前:postgres=# select a.relpages, a.reltuples, a.relfilenode,a.reltype,b.typname from pg_class a, pg_type b where a.relname like 'gaotab%' and a.reltype=b.oid; relpages | reltuples | relfilenode | r...
阅读全文
摘要:开始先给 shmem.c 中增加代码(用来打印全局变量 ShmemIndex)void getmemPointer(){ fprintf(stderr,"ShmemIndex ShmemIndex is %ld \n", ShmemIndex); return;}然后,分别在 bgwriter.c 和 walwriter.c 中,增加如下代码:/* * Main entry point for bgwriter process * * This is invoked from AuxiliaryProcessMain, which has already created t
阅读全文
摘要:开始/* * InitShmemIndex() --- set up or attach to shmem index table. */ void InitShmemIndex(void) { HASHCTL info; int hash_flags; ...
阅读全文
摘要:开始从 CreateSharedMemoryAndSemaphores开始:对于 Postmaster 的各个子进程而言,内存结构在 Postmaster 中已经建立,只是需要挂到各子进程自己的本地变量上。/* * CreateSharedMemoryAndSemaphores * Creates and initializes shared memory and semaphores. * ...
阅读全文
摘要:开始基本上:AuxiliaryProcessMain -->BaseInit -->InitCommunication -->CreateSharedMemoryAndSemaphoresAuxiliaryProcessMain 是各个后台进程(bgwriter等)的调用起始点[作者:技术者高健@博客园 mail:luckyjackgao@gmail.com]/* * AuxiliaryProcessMain * * The main entry point for ...
阅读全文
摘要:开始在postmaster.c 中的 BackendStartup 中,有如下的代码:其中定义了 IsUnderPostmaster=true。而bgwriter 作为 postmaster 的子进程,它的 IsUnderPostmaster 也是为真。 * BackendStartup -- start backend process * * returns: STATUS_ERROR if the fork failed, STATUS_OK otherwise. * * Note: if you change this code, also consider StartAutovacuu
阅读全文
摘要:开始pg_lath.c 是后期生成的。configure 脚本中有如下的信息:# Select latch implementation type.if test "$PORTNAME" != "win32"; then LATCH_IMPLEMENTATION="src/backend/port/unix_latch.c"else LATCH_IMPLEMENTATION="src/backend/port/win32_latch.c"fiac_config_links="$ac_config_link
阅读全文
摘要:开始简单说就是一开始启动的很频繁(200ms 级),后来没有什么事情可做,就懒惰了。变成了 10秒级别。实际验证如下postgresql.conf 中和 log 相关部分:log_line_prefix = '%m' log_min_messages = info logging_collector = off 对 bufmgr.c 的 BgBufferSync的调试:bool BgBufferSync(void) { ……...
阅读全文
摘要:开始bool BgBufferSync(void) { …… /* * Information saved between calls so we can determine the strategy * point's advance rate and avoid scanning already-cleaned buffers. */ st...
阅读全文
摘要:开始bool BgBufferSync(void) { …… /* * Information saved between calls so we can determine the strategy * point's advance rate and avoid scanning already-cleaned b...
阅读全文
摘要:开始上例子:[作者:技术者高健@博客园 mail:luckyjackgao@gmail.com][root@localhost soft]# cat caller.c#include "funclib.h"int main(){ int i=0; for (i=0; i<100; i++) { int temp=func001(); } return 0; }[root@localhost soft]# [root@localhost soft]# cat funclib.hextern int func001(); /*in funclib.c*/exter...
阅读全文
摘要:开始重要的是:必须了解到 静态变量的使用,它们是贯穿其BgBufferSync 的主线。在一次次调用中始终存在,值也在累积。bool BgBufferSync(void) { /* info obtained from freelist.c */ int strategy_buf_id; uint32 strategy_passes; ...
阅读全文
摘要:开始,在代码中加入调试信息。无关部分设省略。bool BgBufferSync(void) { …… int bufs_to_lap; …… if (save...
阅读全文
摘要:开始把BgBufferSync 的代码内容简略化,得到:bool BgBufferSync(void) { …… /* Used to compute how far we scan ahead */ long strategy_delta; int bufs_to_lap; …… ...
阅读全文
摘要:开始看PostgreSQL 中 shared_buffers 的值 是 32MB打印 src/backend/storage/buffer/bufmgr.c 中, NBuffers 的值:结果:[postgres@localhost bin]$ ./postgres -D /usr/local/pgsql/dataLOG: database system was shut down at 2012-11-01 17:19:27 CSTNBuffers is: 4096LOG: autovacuum launcher startedLOG: database system is ready...
阅读全文
摘要:开始[作者:技术者高健@博客园 mail:luckyjackgao@gmail.com][root@localhost test]# cat teststr.c#include<stdio.h>#include<stdlib.h>int main(){ struct person { char name[8]; int age; char sex[4]; char depart[20]; }; struct person student; struct person class[]= { { ...
阅读全文
摘要:开始首先log 相关的内容如下:#------------------------------------------------------------------------------# ERROR REPORTING AND LOGGING#------------------------------------------------------------------------------# - Where to Log -log_destination = 'csvlog' # Valid values are combinations of ...
阅读全文
摘要:开始bufmgr.c 中,对strategy_passes 与 next_passes 有判断处理的逻辑, if ((int32) (next_passes - strategy_passes) > 0) { /* we're one pass ahead of the strategy point */ bufs_to_lap = strategy_buf_id - next_to_clean;#ifdef BGW_DEBUG elog(DEBUG2, "bgwriter ahead: bgw %u...
阅读全文