2014年10月30日 星期四

[MySQL]如何在Percona上安裝mysqlftppc-bigram做中文全文索引呢

為何不用Sphinx或Lucene呢?因為比起前面這兩個,這plugin安裝及使用上相對容易,幾百萬筆的資料查詢起來還可接受,M/S架構上裝在Slave運作也還OK,若資料量千萬筆就比較不建議用這個囉,還是用專業的Sphinx或Lucene吧

環境:CentOS 6.5 + Percona 5.5.40

安裝條件:
1.mysql-devel套件,安裝這個才有mysql_config
2.libicu-devel套件,要支援UNICODE,安裝這個才有icu-config
4.相容MySQL 5.5與5.6,Engine只能用MyISAM喔

2014年10月7日 星期二

msdtc settings not configured optimally

        話說我用SQL Server 2008 R2 BPA分析新安裝的SQL Server,有一項Warning是msdtc settings not configured optimally,照建議的 MSDTC 設定將用於分散式交易中 SQL Server的這個去設定,我發現怎樣都不會通過檢查,後來仔細看它Issue的地方有反饋一些registry key得設定成建議的值,回推正確的設定應該如下圖,供參考


2014年10月2日 星期四

[Oracle]With Clase與SQL Server的CTE用法不太一樣喔,要注意!

        SQL Server的With子句叫CTE,可以說是暫存的結果集,讓語法看器來更簡潔,可以Reuse結果;Oracle也有With子句,叫Subquery Factoring,我以為用法跟SQL Server一樣用,實際上有滿大的差異,今天花點時間研究一下,原來Oracle可以把with子句當inline view(在FORM裡的子查詢)或temporary table來處理喔,很不一樣吧

        據說Oracle會自行判斷with子句當inline view或temporary table處理,讓它自行判斷往往會發生意想不到的結果,可以使用兩個undocumented materialize hint與inline hint來指定用哪種囉

[Oracle]Rman備份時利用Rate參數限制IO流量

        話說用Rman備份資料庫時,開兩個Channel備份,雖然備份時間縮短了,但那段時間的IO好高,雖沒人反映那段時間系統運作很慢,我還是想想有沒有限流的方法,結果Channel那邊本身就有參數支援囉。

        Rate參數是用來限制IO Bandwith/sec的,下面例子限制為10M/s

run { allocate channel t1 type disk rate 10M; CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL ; backup full format '/backup/rman_backup/db_%T_%u_%s_%p' database include current controlfile; sql 'alter system archive log current'; backup format '/backup/rman_backup/archive_%T_%u_%s_%p' archivelog all delete input; delete noprompt obsolete; crosscheck backup; Release Channel t1; }

2014年9月23日 星期二

DBCC SHRINKFILE遇到cannot be shrunk as it is either being shrunk by another process or is empty.

        先不管這件事好不好,同事因為磁碟空間不足去DBCC SHRINKFILE資料檔,結果遇到下面的錯誤

File ID # of database ID # cannot be shrunk as it is either being shrunk by another process or is empty.


        理論上SHIRKFILE不是獨佔的行為,不需要停機進行,而同事已經在應用停止的情況下作業了,也確認沒有另一個process在shirk,資料檔也是有剩餘幾十G的空間,但出現這錯真是奇怪

        上網搜尋了一下,這篇DBCC SHRINKFILE and SHRINKDATABASE failing after backup的解法竟然是建議對資料檔加大幾MB的空間,照著做再shirk還真的成功了,實在不解啊

2014年9月5日 星期五

[Oracle]Partition Table的維護

        如果分區表先天設計不良,後天要改又很麻煩,造成清除逾期資料無法用truncate partition來處理,只能用delete處理逾期資料,那會因為HWM高水位的問題造成資料表占用空間不斷成長,可以參考以下命令來針對partition table與partition index做搬移與重建,就可以釋放空間囉

--alter table TABLE_NAME  truncate partition PARTITION_NAME;

--查看資料表佔用空間
select SUM(BYTES)/1024/1024 SIZE_MB from DBA_SEGMENTS where SEGMENT_NAME='TABLE_NAME';

--查看索引佔用空間
select sum(bytes)/1024/1024 SIZE_MB from DBA_segments where segment_name IN (SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TABLE_NAME');

--產生搬移分區表命令
--alter table TABLE_NAME move  partition PARTITION_NAME
SELECT 'alter table ' || table_name || ' move  partition ' || partition_name from DBA_TAB_PARTITIONS WHERE TABLE_NAME= 'TABLE_NAME';

--因為搬移完分區表,分區索引會失效,所以要重建喔
--產生重建分區索引命令 
--alter index INDEX_NAME rebuild partition PARTITION_NAME TABLESPACE TABLESPACE_NAME
SELECT 'alter index '|| index_name ||'  rebuild partition  ' || partition_name || ' TABLESPACE ' || tablespace_name  from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME');

--檢查是否有無效的索引分區
SELECT * from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME') and status = 'UNUSABLE';




2014年9月3日 星期三

[SQL Server]Replication如何加入新的發行項

很簡單...紀錄一下...以免忘記

對Local Publications下你要加入新的發行項的發行集右鍵,選屬性

在Articles加入新增的資料表為發行項後