使用任何 DB , 如果發現 AP 的效能變差, 能夠立即有成效的效能調校就是檢視 index 的建立與使用狀況..
Exp : docmsg → docsubject 的資料型態是 character varying(1024), 內容主要為中文字, 原本建立的 index 如下:
CREATE INDEX docmsg_docsubject_idx ON docmsg USING btree (docsubject);
發現使用以下的語法透過 Explain 是不會用到 docmsg_docsubject_idx 這個 index
SELECT docsubject FROM docmsg WHERE docsubject LIKE '%測試%';
當 index 加上 pattern_ops 之後, 改成如下語法
CREATE INDEX docmsg_docsubject_idx ON docmsg USING btree (docsubject varchar_pattern_ops);
在執行一次剛剛的 Explain SQL 指令, 就可以發現可以正確使用到這個 index
Exp : xmlboxdocnum2 → docdate 的資料型態是 character(10), 有建立 index 如下:
CREATE INDEX xmlboxdocnum2_docdate_idx ON xmlboxdocnum2 USING btree (docdate);
發現使用以下的語法透過 Explain 是不會用到 xmlboxdocnum2_docdate_idx 這個 index
SELECT devorgid,COUNT(docdate) FROM xmlboxdocnum2 WHERE docdate >= current_date-7 GROUP BY devorgid;
當加上 ::character varying 之後, 改成如下語法
SELECT devorgid,COUNT(docdate) FROM xmlboxdocnum2 WHERE docdate >= (current_date-7)::CHARACTER VARYING GROUP BY devorgid;
在執行一次剛剛的 Explain SQL 指令, 就可以發現可以正確使用到這個 index
當加大 RAM 之後, Exp RAM = 20G 也要一起調大以下參數..
shared_buffers = 65536 # min 16 or max_connections*2, 8KB each
effective_cache_size = 100000 # typically 8KB each