f 三月 2017 ~ 迪貝之家

Microsoft SQL Server Log Shipping

SQL 7就有的技術,簡單的說就是資料庫複本資料同步的技術,而這份複本可以開放讀取的功能以分散營業資料庫的負載,也可純粹當成備援資料庫,不管是在本地還是異地。怎麼達成? 透過SQL Agent自動化排程進行備份、傳檔及復原等作業。

Oracle GolGateden

機房搬遷跨Site能即時同步資料庫利器

Nagios 資料庫維運自動化

一開始設計這架構時,就排除使用remote agent的想法因為在專業分工的組織下,要求安裝新軟體於既有系統是一件不太可行的方案,既然身為DBA就只能把資料庫instance當作是一個最大的agent 想辦法在資料庫內做到我想做的事情

This is default featured post 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured post 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

淺談Postgres 的buffer cache

一般我們對RDBMS cache的了解,想讓大表格的資料進cache,執行類似select count(*) from "your table",應該就會進到資料庫的buffer cache。 但對postgres來說,劇本不是這樣演的。
我以一個556MB 的表格WORDS 來談postgres cache 好了
我們先來count
來看這個表格在buffer cache 佔據多少空間....
阿...只佔了256 KB, 來....我們再看來他的執行計畫是否也顯示只用256KB 的cache
warehouse_db=# explain (buffers, analyze) select count(*) from words;
shared hit = 32  表示cache hit,32 * 8k = 256 KB,還真的只能用到256KB 的db buffer cache
read = 71089,表示disk I/O fetch,71089 * 8k 大約是 555.3 MB,我想大家會質疑為什麼???這是因為postgres 碰到大表I/O時,為了避免大表的資料把已經在cache裏頭的資料給擠了出去,所以設計了一個256KB  ring buffer 供處理大表I/O之用

我寫了一隻function,用一筆一筆的方式撈取資料,你會看到不一樣的地方
create or replace function test_warm() RETURNS void
as $$
declare
 r words%rowtype;
 i tid;
begin
 for i in execute 'select ctid from words'
 loop
   select * into r  from words  where ctid = i;
 end loop;

end;
$$
LANGUAGE plpgsql;

我們來看執行完後, pg_bffercache的數據
warehouse_db=# select test_warm();
 test_warm
-----------

(1 row)

Time: 30707.500 ms

看到了吧.........這就表示它被撈取的時候, 直接進了buffer cache array 裏頭了
我們再來看執行計畫
warehouse_db=# explain (buffers, analyze) select count(*) from words;

shared hit = 68793 *8k 大約就是537MB
這代表甚麼含意 ???
這表示postgres 是一個慢熱的資料庫系統, 如果你不先針對資料預處理, 要讓cache 的利用率提高的話,你得花一段時間去等待, 所以它被指出, 適用於OLTP 的環境
至於你想跑batch....嘿嘿......系統設計的人得想辦法先暖機啦!!
9.4以上的版本出了pg_prewarm的extension,就是用來把表格先pre-liad到記憶體裡頭
https://madusudanan.com/blog/understanding-postgres-caching-in-depth/

測試安裝11.2.0.4 最新Recommand Patch 碰到的問題

要說明的是,寫這篇文章的時候的作業系統環境是Oracle Linux 6.4。現在工作碰到RAC 12.2跑在HPUX上頭,打補丁實在是有夠麻煩的。
第一、我手上的環境不允許安裝bash,但opatch auto就是要使用bash。
第二、HP與Oracle兩家公司不合是眾所周知的事情,所以Oracle在Patch 開發上是耍了點小手段,造成維護及維運上的不便,故事我有空整理相關文章的時候,再來跟各位報告。

我們回到這個主題吧~~ 我寫這篇文章的時間應該是2017年的2或3月吧!!安裝Patch首先當然要知道,要下載哪些東西。為了這個,我還特地開Call 去問了Oracle,結果還不是得由自己把文件看完...因為每個Recommand Patch 出來,搞不好都跟之前有些不同也不曉得未來還會不會再有新的Recommend Patch出來,反正只要有新的建置,就是得去metalink網站查一下,有沒有最update 的更新。在當時服務的客戶是把DBA職務當成一個IT Infra統包在用,所以我也身兼system administrator,所以我本身就是root,因此我底下談的都是透過root來執行opatch auto所碰到的情況。

目前為止, 應該就是這兩個, 24436338 及 24433711
1. 24436338 : grid & db patch
2. 24433711: Security Patch

這是我認為上patch 時的執行要點 :

24436338:

  1.GI 及 DB Binary 是同時更新的
  2.db recover 或者 rman duplicate 啟動後
    執行文件內 2.5.2 Loading Modified SQL Files into the Database
    更新資料庫內的物件 ---- 其實我的測試主要是為了有一個Server Consolidation 的專案
    因此會有既有資料庫的Clone 動作

24433711: Security Patch

When p24436338 done,including binary and "loading modified SQL Files into the Database",
p24433711 patching should be proceeded for security bug fixes.

不要以為照著文件做,就都沒問題,底下就是我在測試的時候,碰到的問題

1.建出OCM Response file, 因為 opatch auto 一定會問該檔在何處
參照文件 How to Create an OCM Response file to Apply a Patch in Silent Mode - opatch silent.pdf

2. 建立 $GRID_HOME/.patch_storage
參照文件 Opatch in newly installed environment_ Opatch version check。這是opatch 的一個bug,不自行建立, opatch 會一直出現version check failed,明明就是最新版,11.2.0.3.15,還給我拋這種訊息誤導。

3.patch 解壓縮之後,記得改owner:group,db 有一個em 相關的patch,路徑埋得還蠻深的,一個template檔吧~~ 權限是 770, 如果用root 解開, 哈.......patch 安裝時就跟你說, 該檔找不到或打不開,然後patch 就失敗無法繼續.......因為上patch 的時候, 程式會透過su切換身分。