f 十月 2020 ~ 迪貝之家

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.

Oracle DB Instance with Huge Page的故事

 

為了降低資料庫使用記憶體在CPU上的overhead
我手上最近新建置的系統
一定都採用huge page
為了處理上次沒做完的作業
在今日凌晨安排的相關的維護工作
我們DBA在這種硬體擴充上的角色
當然就只是協助看一下重開後資料庫的狀況
這是一套RAC
DB服務上當然沒有疑慮
反正就是shutdown 後 reboot
session會自行failover
只是這一次怪了
發覺grid 起來後
居然沒辦法帶起db instance
只好去查看alert log
3小~~
large page數不足
怎麼上次沒發生
只好跟負責人溝通
按照換算
應該是要給到40960
下指令帶db instance
還是帶不起來
好吧~~只好再仔細看一下log
cow~
就差2個page
改完後
db instance就可以帶起來了
第二個instance比照辦理
就順利多了
這個case我當然也可以把only的設定拿掉
再把db instance帶起來
但那就失去了我當初要求設定large page的用意了

WEB Page Hit Count

 

八月份的時候
為了要統計頁面的點擊率
所以AP用update 的方式來累加
結果在sql server 上造成了大量的lock
從whoisactive抓到的資料如下:
標註紅色的數字是session id
紫色的數字是被卡住的session數
藍色框框就是update + 1
當下我就問了開發人員
你到底什麼邏輯
要針對同一筆資料一直進行update作業
我就說你的邏輯應該有問題
他提出的解法就是
把每一次點擊
都以insert來處理
要看點擊率的話
就以select count(*) 來統計


MySQL 有其解決方案
表格定義如下 :
CREATE TABLE hitcount
(
path VARCHAR(255)
CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
hits BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (path)
);

其update + 1的sql 語句
INSERT INTO hitcount (path,hits) VALUES('some path',LAST_INSERT_ID(1))
ON DUPLICATE KEY UPDATE hits = LAST_INSERT_ID(hits+1);

我在VM上測了一下
同時開了10個ssh console
下了指令去看跑的狀況
其實我也不太肯定
到底是否有效
只能看看將來專案上有沒有機會碰到來進行驗證

strawberry perl 寫windows event logs

 

perl 在windows平台上要去寫log
大概都是透過Win32模組吧~~
網路上也有個人說
裝個cygwin
但營運系統怎麼可能放這東西
哈~~
1. Win32::EventLog
 use strict;
use warnings;
 use Win32::EventLog;
   my $eventLog = Win32::EventLog->new('MyProgram');

   my %eventRecord = (
           'Category' => 0, #NULL,
           'EventID' => 0,
           'EventType' => EVENTLOG_ERROR_TYPE,
           'Strings' => 'Test.',
           'Data' => 'Test.',
           );

   $eventLog->Report(\%eventRecord);
   $eventLog->Close();

Win32::EventLog
2. Win32::OLE
它的方式是叫起window host shell(WSH)
來傳遞訊息到event log裏頭
use strict;
use Win32::OLE;

my ($app)=Win32::OLE->new("WScript.Shell", sub {$_[0]->Quit;})  or die "Can't start Shell", Win32::OLE::LastError();

$app->LogEvent(1,"Replication Delay!");

Win32::OLE
我應該會採用第二種
不會造成confuse

strawberry perl 存取sql server

 

會想用這個
是曾經發生過
sql server replication的delay監控
因為issuer與subscriber間的網路疑似曾斷線過
造成警訊送不出來
因為當時連我自己透過sqlcmd 以openrowset的方式來執行
distribution.dbo.sp_replmonitorsubscriptionpendingcmds
用以監控他這隻procedure所評估的delay也不work
怪了~~明明就是一個新連線,怎會不work
算了...不研究....
因為它黑箱太多了
所以就想以另一種方式來處理subscriber的delay監控
windows 上的perl不是strawberry就是activestate perl
我的選擇是berry,因為它有portal 版
監控的想法是
在issuer建一個有時間欄位的供複寫的表格
透過perl開兩個連線去撈出值來比對就知道時間差了
因此就先來try try 連線存取coding的寫法
如下 :

 use DBI;

use strict;

use warnings;

my $host     = '10.0.0.1';

my $database = 'master';

my $user     = 'sa';

my $auth     = 'your password';


my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database";

my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 });

my $sql = qq/select name from sys.databases/;      # the query to execute

my $sth = $dbh->prepare($sql);          # prepare the query

$sth->execute();                        # execute the query

my @row;

while (@row = $sth->fetchrow_array) {  # retrieve one row

    print join(", ", @row), "\n";

}

$dbh->disconnect;

strawberry perl
我沒做什麼odbc相關設定
因為我用的是DBI
相關的模組預設就已經包了進去
所以存取SQL Server 部分算好用

如何查看sql server index自動更新的日期


 

其實從2008開始
sql server就支援數據統計自動化
這裡還是自己做
不過不是我做
是AP單位被要求要維護自己物件查詢的優化
不過去年一月份
應該透過server link發生timeout
我看了看之後
比對了正常與異常間的執行計畫後
就發現timeout的那天index用錯了
我就建議指定index hint
指定對的index之後
效能回復正常
不過就被回咬一口
問我為何資料庫沒有使用正確的索引
我當下其實我也懶得再回應
我就貼圖告知
sql server 會動態更新數據
sp_autostats





也是我懶得找指令去查看數據更新日期
不過今天看到了
下次我就直接貼這個圖就好了
sp_autostats