2008年12月31日 星期三

[Oracle] 使用rownum選擇列

Oracle在使用rownum select資料時

select rownum from orderTable where rownum between 100 and 200 ;

不會有資料出現,因為rownum 在select出結果的時候才會產生,有點像增加一個臨時的欄位,從1開始; between 100 and 200還沒有結果,所以不會出現資料!!

可以用下面的方法解決:

select * from orderTable where rownum <=200 minus (select * from orderTable where rownum <=100);

或是使用ROW_NUMBER函數

SELECT NO, NAME FROM (

SELECT NO, NAME, ROW_NUMBER() OVER (ORDER BY NO) RNUM

FROM ROWNUM_TEST ) WHERE RNUM BETWEEN 5 AND 10

2008年12月26日 星期五

如何使用獨立磁帶媒體櫃排定自動備份的時程

如何使用獨立磁帶媒體櫃排定自動備份的時程
轉貼微軟msdn  

http://support.microsoft.com/default.aspx?scid=kb;zh-tw;239892
「Windows 2000 備份」(Ntbackup.exe) 設計來與「卸除式存放裝置管理員」(RSM) 搭配使用,以便在備份時管理媒體。
這在磁帶媒體櫃中存有一些磁帶時特別好用,因為在排定的備份程式呼叫磁帶時,RSM 可以自動掛載或卸載磁帶。
如此使得不用人力介入的自動備份得以實現,因為 RSM 會依據您所選取的備份選項載入正確的磁帶,然後覆寫原先的內容或者附加到原先的內容後面。

如果您有一部獨立的磁帶媒體櫃 (需要手動載入/卸載媒體),只要欲備份的磁碟內容可以容納到一卷磁帶之內,便可以排定在夜間進行自動備份。您有兩種方法可以選擇:
• 受管理的方法
當您想管理媒體時可使用此法。此種方法可以確保磁帶在被覆寫前,磁帶機內已放入適當的磁帶。建議您使用此法。
• 不受管理的方法
此種方法只會以目前的備份工作覆寫目前位於獨立磁帶機中的磁帶。此法較易實作,但若啟動排定的備份之前磁帶機中未放入適當的磁帶,重要的資料就可能被覆寫。若您與不同的程式共用一部獨立磁帶機,則不建議您使用此法。

受管理的方法
若要使用此方法,請將磁帶標上標籤 (一週內的每個工作天各一卷),然後排定每天備份,以一週為一輪。
唯一需要的人力介入,是確保前一晚的備份磁帶已經退出,並將次一晚的磁帶插入獨立磁帶媒體櫃內。任何一個非工程背景的助理人員均可從事這項工作,只要在下次排定的備份時間之前執行此手動作業即可。
下一節簡介了準備磁帶與貼標籤的基本概念及步驟,並說明如何排定 Ntbackup 來使用磁帶。
此處的範例經過簡化,說明了在每晚 (週一至週五) 執行正常備份,每次均覆寫原先的磁帶。
或許您會想在週一至週五執行增量備份,然後在週末以另外一組磁帶執行完整備份。磁帶必須先位於 RSM 匯入、可用 (free) 或備份等媒體集區, Ntbackup 才能使用該磁帶。

匯入媒體是可被 RSM 辨識為與已安裝程式 (如 Ntbackup) 相容,但尚未分類及移至該程式的媒體集區之媒體。若 Ntbackup 在匯入媒體集區中偵測出它所認得的媒體,您會收到一個詢問是否要匯入該媒體的訊息。

此媒體匯入以後,您就可以用它來執行還原或者製作新的備份。
可用媒體是 RSM 準備給任何程式使用的媒體,其中寫入了一個「可用媒體」標籤。當您首次使用某一卷磁帶時,程式會從可用媒體集區中取出該磁帶,再將它配置到該程式的媒體集區內,以供將來的工作使用。

準備磁帶
請使用下列步驟,準備 Ntbackup 所使用的每一卷磁帶。 注意 :此作業會在每一卷磁帶上寫入一個「可用媒體」標籤。
1. 使用 [電腦管理],展開 [儲存裝置] ,展開 [卸除式媒體] ,再展開 [實體位置] 。
2. 找出磁帶裝置的登錄項並將其展開,然後按一下該磁帶裝置底下的 [媒體] 圖示。
3. 將磁帶插入磁帶機內。RSM 會讀取磁帶,此磁帶所在的媒體集區則顯示在右方窗格內 (若是全新的媒體,這通常是無法辨識的媒體集區)。
4. 在右方窗格中,在磁帶上按一下滑鼠右鍵,再按一下 [準備] 。您可以監控此作業的工作佇列以確定它是否完成,或者等待狀態變為「閒置,可用」(Idle, available),媒體集區變為「可用」。
5. 寫入可用標籤之後,請在磁帶上按一下滑鼠右鍵將其退出,再按 [退出] 。此時「媒體退出精靈」啟動,並將磁帶移至離線媒體櫃中。
6. 對於每個欲進行準備工作的磁帶,均請重複步驟 3 至 5。

記住,Ntbackup 在進行備份時只能使用準備好的磁帶。請預先計算好您的備份策略需要多少卷磁帶,並在繼續下一節之前,準備好所有的磁帶。
替磁帶加上標籤
準備好磁帶以後,請利用 Ntbackup 以可描述磁帶內容的名稱,撰寫一個 Microsoft Tape Format (MTF) 標籤。完成以後,即可替 Ntbackup 排程,藉由指定相同的媒體標籤名稱,不斷重複使用該磁帶。 請使用下列步驟,替您要 Ntbackup 重複使用的每一卷磁帶加上標籤。

注意 :此作業會在每一卷磁帶中寫入一個唯一的 MTF 標籤。請確定每一卷磁帶都有唯一的名稱,即使您每週輪流使用不同組的磁帶。
1. 確定備妥的磁帶已放入獨立磁帶媒體櫃中。
2. 啟動 Ntbackup,再按一下 [備份精靈] 。
3. 當 [備份項目] 對話方塊出現時,請按一下 [備份選取的檔案、磁碟機或網路資料] 。
4. 當 [要備份的項目] 對話方塊出現時,請按一下任何本機磁碟機上的任何單一資料夾。
5. 當 [儲存備份目的地] 對話方塊出現時,請在 [備份媒體類型] 區域中按一下磁帶機,再於 [備份媒體] 區域中按一下 [新媒體] 。
6. 當 [完成備份機靈] 對話方塊出現時,請按一下 [進階] 。
7. 繼續進行螢幕上的步驟,直到 [備份標籤] 對話方塊出現為止。
在此對話方塊中,您可以變更 [備份標籤] 和 [媒體標籤] 欄位。

[媒體標籤] 欄位中的資訊依磁帶不同而有所差異。請修改 [媒體標籤] 欄位的內容,讓它含有有意義的資訊,以代表一週內每一天的磁帶。本文中的範例使用唯一的名稱,如 Monday-Full、Tuesday-Full 等等 (一週內的每一天及每一卷磁帶都有一個唯一的名稱)。
8. 繼續執行對話方塊的內容並開始備份。如此即可備份單一資料夾,並寫入一個有意義的媒體標籤,且從現在開始您可以用它來排定備份的時程。
9. 備份程序完成之後,結束 Ntbackup。
10. 使用 RSM,您可以在備份媒體集區中看到磁帶出現。在此磁帶上按一下滑鼠右鍵,即可檢視其內容。若您按一下側邊的標籤, [識別標籤] 欄位中含有您在步驟 7 中所指定的磁帶名稱。

從現在開始,只要您排定在該日執行備份,並選擇覆寫相同的標籤名稱時,便會使用這個名稱。
11. 在磁帶上按一下滑鼠右鍵,再按一下 [退出] ,然後再於磁帶上貼上備份時所指定的標籤名稱。
12. 對每一卷磁帶重複上述步驟,直到所有磁帶都擁有有效的 MTF 媒體標籤為止。

排定週期性的每週備份
您可以使用 Ntbackup 內建的排程器排定週期性的每週備份工作。您可以選擇建立一個批次檔搭配「排程工作精靈」 或 at schedule 指令使用。
首先,您需要使用 Ntbackup 來建立備份選擇 .bks 檔, Ntbackup 使用這個檔案來偵測要備份哪一磁碟機/資料夾/檔案。
若在備份排程器之外排程,您還得利用 Ntbackup 建立備份指令行字串供批次檔使用。 若要排定週期性的每週備份:
1. 啟動 Ntbackup,再按一下 [備份精靈] 。
2. 依照精靈畫面的指示執行,並選擇您每晚想備份的磁碟區或資料夾。
3. 當 [儲存備份目的地] 對話方塊出現時,請在 [備份媒體類型] 區域中按一下磁帶機,再於 [備份媒體] 區域中,按一下與目前排定備份的日期相符的磁帶名稱 (如 Monday-Full)。
4. 當 [完成備份精靈] 對話方塊出現時,請按一下 [進階] 。
5. 當 [媒體選項] 對話方塊出現時,請按一下 [用這個備份取代媒體上的資料] 。
6. 當 [備份標籤] 對話方塊出現時,請修改 [媒體標籤] 欄位的內容,使其與目前磁帶的媒體標籤相符。這樣做可以確保在下次進行週期性備份時,可以掛載同一日的磁帶。
7. 當 [何時製作備份] 對話方塊出現時,按一下 [稍後] ,再輸入一個描述性的工作名稱。
8. 按一下 [設定排程] ,排定備份在適當時間執行。若要讓這一天的備份週期性地執行,請按一下 [每週] (位於 [工作排程] 清單中。)
9. 對一週內的每一天重複上述步驟,排定備份每週重複發生。請確定您使用步驟 5 中正確的媒體標籤,以符合該日的磁帶名稱。
10. 確定目前備份之標籤磁帶已放入獨立磁帶媒體櫃中。

若想排定一個批次檔,在備份的同時還執行其他額外工作,您可以從 Ntbackup 中的 [排定工作] 標籤中檢視任何排定工作的內容,或在「控制台」中使用「排定的工作」工具,從排定的備份工作中複製備份指令字串。
然後將此字串置於個別的批次檔內,並將它 改成符合您需求的內容,再以 at 指令或「工作排程器」排定其時程。

下例是從上面所執行的某個已排程備份的內容複製而來的備份指令行:
C:\WINNT\system32\ntbackup.exe backup "@C:\Documents and Settings\bkupuser\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\daily.bks" /n "Monday-Full" /d "Mondays Full Backup" /v:no/r:no /rs:no /hc:on /m normal /j "Mondays Job" /l:f /t "Monday-Full"
注意 :最後的參數可能是 /g {guid},代表 RSM Logical_Media ID 而非 /t "tape_name"。{guid} 值是一個 32 位元值,形式為 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"。

您可以使用其中一種參數,在批次檔中代表以及使用磁帶。除了查看已排程 的備份工作內容之外,所有邏輯媒體的 {guid} 值都可以使用以下的 Rsm.exe 指令擷取出來。這些值會依序列出,因此很難分辨哪一個 {guid} 值代表哪一捲磁帶。
Rsm.exe view /tlogical_media /guiddisplay

您也可以在批次檔中使用 Rsm.exe 指令行工具,指示 RSM 在完成備份後退出磁帶。
使用 Rsm.exe 併發出下列指令,即可擷取出實體媒體名稱,以搭配 [退出] 指令使用:
rsm view /tphysical_media

PHYSICAL_MEDIA

Monday-Full - 1
Tuesday-Full - 1
Wednesday-Full - 1
Thursday-Full - 1
Friday-Full - 1

此指令順利完成。

備份完成後,請在每一天的批次檔案中,使用 rsm eject 指令來退出該日的磁帶:
rsm eject /pf"Monday-Full - 1" /astart

下例顯示星期一要執行的備份批次檔範例:
echo off start /wait C:\WINNT\system32\ntbackup.exe backup "@C:\Documents and Settings\bkupuser\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\daily.bks" /n "Monday-Full" /d "Mondays Full Backup" /v:no/r:no /rs:no /hc:on /m normal /j "Mondays Job" /l:f /t "Monday-Full" rsm eject /pf"Monday-Full - 1" /astart

不受管理的方法
若要使用不受管理的方法,只需在備份指令字串的結尾使用 /um 參數 (switch) 即可。
這會告訴 Ntbackup 尋找第一個可用的磁帶、格式化該磁帶、再使用該磁帶進行目前的備份作業。您必須使用 /p 參數 (switch) 來指派一個媒體集區裝置 (例如, "8mm mp" );當您使用 /um 參數時。若這麼做,請勿使用下列參數:
/a
/g
/f
/t

當您使用 /um 參數時 (switch),Ntbackup 會在下列媒體集區中搜尋可用的媒體:
• 可用集區
• 匯入集區
• 無法辨識的集區
• 備份集區
當 Ntbackup 偵測出一個可用磁帶時,搜尋便停止,此磁帶會被格式化,並在未提示您輸入任何資料的情況下使用。
此指令不適用於磁帶載入程式,且只有在使用獨立磁帶裝置時才能使用。

注意 :某些低價的獨立式磁帶機不會通知 RSM 媒體已經變更。若您使用的是這一類的磁帶機,在下次備份週期時,備份報告中會記錄下列錯誤訊息之一:
• 未執行作業,因為沒有未使用的可用媒體。(The operation was not performed because no unused media was available)
-或-
• 未執行作業,因為找不到指定的媒體。(Operation was not performed, because the specified media cannot be found)
若要防止發生這些錯誤,請參閱下列文件,從中尋找解決或避開的方法:
267574 (http://support.microsoft.com/kb/267574/EN-US/) Scheduled Backup May Fail After Changing Media

使用 /um 參數時,建議您不要利用 /n 參數替媒體加上標籤。請讓備份作業使用預設的日期/時間作為標籤名稱和說明。這樣可以避免多重磁帶擁有相同的標籤名稱,否則可能造成 RSM 要求手動掛載磁帶,使得備份作業無法繼續以無人看管的方式自動完成。

下面是一個備份批次檔的範例: echo offstart /wait rsm.exe refresh /lf"Your_Library_Name"c:\winnt\system32\ntbackup.exe backup "@C:\Documents andSettings\bkupuser\Local Settings\Application Data\Microsoft\WindowsNT\NTBackup\data\daily.bks" /v:no /r:no /rs:no /hc:on /m normal/j "daily.job" /l:f /p "8mm mp" /um

如需所有可用備份參數 (switch) 的清單,或者這些範例中所用參數之詳細資訊,請鍵入下列指令,參閱 Ntbackup 說明檔: ntbackup /?

如需詳細資訊,請按一下下列文件編號,參閱 Microsoft Knowledge Base 中的這份文件:
234492 (http://support.microsoft.com/kb/234492/EN-US/) Windows Backup Creates New Tape GUID When Writing New Label
267574 (http://support.microsoft.com/kb/267574/EN-US/) Scheduled Backups Fail on Standalone Tape Drives After Changing Media
243260 (http://support.microsoft.com/kb/243260/EN-US/) Changed Parameters for Scheduled Backup Job May Not Be Saved

2008年12月11日 星期四

Oracle exp/imp的query參數

資料常有例行轉檔的需求,在MS SQL系列有BCP/DTS/SSIS還滿方便的,但Oracle就沒有這麼有彈性的工具,通常是使用SQL*Loader、exp/imp,google查到原來exp/imp是可以加上where查詢的,不過在不同平台會有字元逸脫的問題,範例如下:

@Windows:
exp ... query='where deptno=10'
exp ... query='where deptno=' '10' ' '
exp ... query='where deptno"<"10'

@Solaris(C shell):
exp ... query=\"where col1 < 1000\"
exp ... query=\"where col1 \< '1000'\"

@ Linux
exp ... query=\"where owner \= \'SYSTEM\'\"

2008年11月21日 星期五

10個免費的圖表API

繪製圖表的API除了使用商業產品(Crystal Report等),以及Office Web Component(Excel),其實也有很多免費的工具,如下面10個,其中最特別的Google Chart是線上服務,把資料打在google chart的url裡面,就會在網頁上畫出圖表,Google果然是online應用的專家!

另外自己現在寫C#,搭配使用的是ZedGraph,也相當的好用。

  1. Google Chart API lets you dynamically generate charts. Google chart API is an online service and needs an internet connection. It works by sending an URL to google which will return the chart image. It is very simple to use and if you need abstraction from writing url's you can use any freely available libraries like gchartrb or javagooglechart
  2. Flot is a pure Javascript plotting library for jQuery. It produces graphical plots of arbitrary datasets on-the-fly client-side.The focus is on simple usage (all settings are optional), attractive looks and interactive features like zooming.Although Flot is easy to use, it is also advanced enough to be suitable for Web 2.0 data mining/business intelligence purposes which is its original application.
  3. Open Flash Chart is a Flash charting component. It is fairly easy to setup and has classes written in PHP, Perl, Python, Java, Ruby on Rails, and .Net to connect to the Chart. You can create some really nice looking Bar Charts, Pie Charts, Area Charts and etc…
  4. AmCharts is a set of Flash charts for your websites and Web-based products. AmCharts can extract data from simple CSV or XML files, or they can read dynamic data generated with PHP, .NET, Java, Ruby on Rails, Perl, ColdFusion, and many other programming languages.
  5. PlotKit is a Chart and Graph Plotting Library for Javascript. It has support for HTML Canvas and also SVG via Adobe SVG Viewer and native browser support.PlotKit is fully documented and there is a quick tutorial to get you started.PlotKit is a complete rewrite of CanvasGraph. It is better structured and supported.
  6. Flotr is a javascript plotting library based on the Prototype Framework version 1.6.0.2. Flotr lets you create graphs in modern browsers with features like legend support, negative value support, mouse tracking, selection support, zoom support, event hooks, CSS styling support and much more.
  7. PHP/SWF Charts is a simple, yet powerful PHP tool to create attractive web charts and graphs from dynamic data.You can use PHP scripts to generate or gather the data from databases, then pass it to this tool to generate Flash (swf) charts and graphs. Any other scripting language (ASP, CFML, Perl, etc.) can be used with XML/SWF Charts (the XML version of the same tool.)PHP/SWF Charts makes the best of both the PHP and SWF worlds. PHP scripts provide integration, and Flash provides the best graphic quality.
  8. Visifire is a set of open source data visualization components - powered by Microsoft® Silverlight™. With Visifire you can create and embed visually stunning animated Silverlight Charts within minutes. Visifire is easy to use and independent of the server side technology. It can be used with ASP, ASP.Net, PHP, JSP, ColdFusion, Ruby on Rails or just simple HTML.
  9. FusionCharts Free is a cross-browser and cross-platform flash charting component that can be used to render data-driven & animated charts for your web applications and presentations.
  10. JFreeChart is a free 100% Java chart library that makes it easy fordevelopers to display professional quality charts in their applications.It has a flexible design that is easy to extend, and targets both server-side and client-side applications. It also supports many output types, including Swing components, image files(including PNG and JPEG), and vector graphics file formats (includingPDF, EPS and SVG)

2008年11月18日 星期二

自動磁碟清理

IE的暫存檔如果不加以清理會把全部磁碟空間佔滿,在server上是滿嚴重的事情,windows內建的磁碟清理工具其實有隱藏參數可以做到自動清理。
輸入"cleanmgr /sageset:99",數字從0~65535,會出現設定選項,可以設定要清除哪些種類的檔案,設定好要清除的選項按下確定即儲存(儲存位置99)。

要執行你預先儲存的選項只要打"cleanmgr /sagerun:99"即可。將這行指令設定為工作排程即可。

2008年11月12日 星期三

ASP.NET: Validation of viewstate MAC failed

公司的一個系統用ASP.Net開發,用兩部server+loadbalance switch作負載平衡,常碰到網頁發生"Validation of viewstate MAC failed"的錯誤,粗略了解viewstate大概是主機將一些資訊hash過的資料,作為傳值及驗證用。幸好google到一些前人的經驗,很快解決了問題。
範例:
<machinekey decryption="AES" validation="SHA1" validationkey="1239427563465sdfsf..." decryptionkey="sdf234rgr34t...">

將此設定放在web.config裡面的底下。

msdn提到-- validation的參數: MD5--Specifies that ASP.NET uses the Message Digest 5 (MD5) hash algorithm to validate data. This algorithm produces better performance than SHA1.



參考資料:
Validation of viewstate MAC failed 驗證ViewState時 MAC 失敗

當 ASP.NET 發生 Viewstate MAC 的驗證失敗

machineKey Element (ASP.NET Settings Schema)

ASP.NET machineKey Generator

在 ASP.NET ViewState 中尋寶

執行效能: ASP.NET 應用程式的擴充策略

2008年9月30日 星期二

SQL定序

Server: Msg 446, Level 16, State 9, Line 1
Cannot resolve collation conflict for equal to operation.

當你在建立DATABASE時可以選擇collation(定序),若你無法重建DATABASE,則可以調整每個TABLE中每個欄位的collation(定序)。

如果你跨DB join,則所有join的欄位定序都必須相同,否則就會出現你目前的錯誤,你可以進入Enterprise Manager中,選到你要的TABLE,按右鍵選擇Design Table,選到你要join的欄位,就可以設定collation(定序)。

當A與B的定序不同
合併讀取資時會因為定序值不同而出現錯誤訊息
Cannot resolve collation conflict for equal to operation

更改為以下後就可以直接抓取到資料
where A.username COLLATE Chinese_Taiwan_Stroke_CI_AS= B.username COLLATE Chinese_Taiwan_Stroke_CI_AS

2008年9月16日 星期二

IIS檔案上傳size限制

如果您是Windows 2003 Server IIS 6用BASP21元件上傳檔案時,只要檔案超過 200K 就會發生 ASP 0104 '80004005' 的錯誤,
要求物件 錯誤 'ASP 0104 : 80004005' 不允許的操作,原因是web server的內定值被限制

以記事本開啟 C:\windows\sytem32\inetserv\metabase.xml
上傳限制:
找尋 AspMaxRequestEntityAllowed 字串
將 204800 (200K) 修改成你要的數字
下載限制:
找尋 AspBufferingLimit 字串
預設 4MB ,將它修改成你要的數字

該檔案由於被 IIS 系統使用中
請於 IIS 管理員中,於[本機電腦]上點右鍵
選擇[內容]進入後,將[啟用直接編輯 metabase 檔案] 勾選
即可變更metabase.xml檔案內容。

2008年9月12日 星期五

SQL2005 part4

將800多萬筆, 31GB的資料轉到新的機器後, 暫時已能應付ap server的存取, 從performance monitor觀察IO數據、SQL的效能指標都很不錯, 但cpu loading還是一直居高不下

從工作管理員看sqlserver.exe的記體使用量一直維持在131MB左右, 但可用記憶體剩2G多, 很怪! 另一台只有4G Ram的在工作管理員顯示吃到2.7G多(原因是開啟AWE後得從SQLSERVER: Total server memory看才正確!)

雖然很不想去動資料面, 畢竟這是廠商的職責, 不過看這樣子他們也是沒什麼招可玩了...
把自己學過的一點點東西拼湊起來急救看看, 先用sql profiler觀察一下, 大致是select幾個比較大的table時, cpu loading會衝到近滿載, 看了一下竟然沒建索引!! 自己照著畫面隨便建了幾個索引, 沒想到cpu loading馬上降下來!!

繼續把profiler錄下的語法拿到sql tuning advisor執行計畫跑看看, 工作成本變成原來的1/10, 感覺還滿爽的, 繼續再建幾個table的索引, 果然cpu好像吃了維骨力, 爬樓梯都不會喘了..傑克!這真是太神奇啦~~

更意外的是可用記憶體剩不到500MB啦(微軟建議/3gb跟AWE最好不要同時啟用, 以免造成OS記憶體不足, 這點有待觀察), performance monitor的SQLSERVER: Total server memory計數器數字也變成7G多, 看起來正常多了

A generic error occurred in GDI+

在使用.net 2.0產生圖檔要寫入server時常碰到這個錯誤(怒!!)
大部分原因是出在對該資料夾的寫入權限不足,或是沒有先產生該資料夾造成
-- 那你寫這什麼訊息啊! (/‵Д′)/~ ╧╧


微軟對該問題的KB
http://support.microsoft.com/?id=814675

2008年9月10日 星期三

SQL 2005 重要效能計數物件(Performance Counter)及建議值

列舉部份供參考:

Object

Counter

Preferred Value

Memory

Available Mbytes

> 100MB

Paging File

%Usage

< 70%

Process (sqlservr)

%Privileged Time

< 30% of %Processor Time (sqlservr)

Processor

%Privileged Time

< 30% of Total %Processor Time

PhysicalDisk

Avg. Disk Sec/Read

< 8ms

PhysicalDisk

Avg. Disk sec/Write

< 8ms (non cached) < 1ms (cached)

SQLServer:Access Methods

Forwarded Records/sec

< 10 per 100 Batch Requests/Sec

SQLServer:Access Methods

FreeSpace Scans/sec

<10 per 100 Batch Requests/Sec

SQLServer:Access Methods

Full Scans / sec

(Index Searches/sec)/(Full Scans/sec) > 1000

SQLServer:Access Methods

Workfiles Created/Sec

< 20 per 100 Batch Requests/Sec

SQLServer:Access Methods

Worktables Created/Sec

< 20 per 100 Batch Requests/Sec

SQL Server:Buffer Manager

Buffer Cache hit ratio

> 90%

SQL Server:Buffer Manager

Free list stalls/sec

< 2

SQL Server:Buffer Manager

Lazy Writes/Sec

< 20

SQL Server:Buffer Manager

Page Life Expectancy

> 300

SQLServer:Buffer Manager

Page lookups/sec

(Page lookups/sec) / (Batch Requests/sec) < 100

SQL Server:Locks

Lock Requests/sec

(Lock Request/sec)/(Batch Requests/sec) < 500

SQLServer:SQL Statistics

SQL Compilations/sec

< 10% of the number of Batch Requests/Sec

SQLServer:SQL Statistics

SQL Re-Compilations/sec

< 10% of the number of SQL Compilations


詳細資訊:

TechNet Webcast: SQL Server Performance Counter Guidance (Level 300)

http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032357640%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e

SQL2005 part3

針對 4 GB 以上的實體記憶體啟用記憶體支援

預設會停用 Windows 原則鎖定記憶體分頁選項。必須啟用這個權限,才可設定 Address Windowing Extensions (AWE)。此原則決定哪些帳戶可以使用處理序將資料保留在實體記憶體中,以防止系統將資料傳送到磁碟上的虛擬記憶體。在 32 位元作業系統上,如果在未使用 AWE 時設定這個權限,則會明顯降低系統效能。雖然非必要,不過我們建議在使用 64 位元作業系統時在記憶體中鎖定分頁。

請注意 對於 64 位元版本的 SQL Server 2005,只有 SQL Server 2005 Enterprise Edition 可以向右使用 鎖定分頁記憶體中的 使用者。

要指派 在記憶體中的鎖定分頁 使用者權限,請依照下列步驟執行:1. 請按一下 [ 開始 ] ,再按一下 [ 執行 ] ,鍵入 gpedit.msc ,然後再按一下 [ 確定 ] 。 群組原則 ] 對話方塊隨即出現。
2. 展開 [ 電腦組態 ,然後展開 [ Windows 設定 ] 。
3. 展開 [ 安全性設定 ,然後再展開 [ 本機原則 ] 。
4. 請依序按一下 [ 使用者權限指派 ] ,依序及 [ 鎖定分頁記憶體中 。
5. 在 [ 本機安全性原則設定 ] 對話方塊中,按一下 [ 新增使用者或群組 。
6. 在 [ 選取使用者或群組 ] 對話方塊,新增的帳戶擁有執行 Sqlservr.exe 檔案,使用權限,然後按一下 [ 確定 ] 。
7. 關閉 群組原則 ] 對話方塊。
8. 重新啟動 SQL Server 服務。.
您將 在記憶體中的鎖定分頁 使用者權限指派並重新啟動 SQL Server 服務之後,Windows 作業系統不再出 SQL Server 中緩衝區集區記憶體頁面處理。 不過,Windows 作業系統仍然可以分頁在 SQL Server 處理序內 nonbuffer 集區記憶體不足。


若要針對 SQL Server 2005 的執行個體啟用 AWE,請使用 sp_configure 將 awe enabled 選項設為 1,然後重新啟動 SQL Server。因為 SQL Server 啟動時會啟用 AWE,並直到 SQL Server 關機為止,所以在使用 awe enabled 時,SQL Server 會傳送「已啟用 Address Windowing Extensions」訊息到 SQL Server 錯誤記錄檔以通知使用者。

網路應用程式的資料輸送量最大化
如果選取了 [網路連線] 中的 [檔案共用的資料輸送量最大化] 選項,作業系統會將優先權撥給執行緩衝輸入/輸出 (I/O) 作業的應用程式,方法是在檔案系統快取中,快取這些應用程式的 I/O 頁面。這個選項會限制 SQL Server 可用於一般作業的記憶體。

2008年9月8日 星期一

SQL2005 part2

一些SQL Server的基本設定事項:

所有資料庫軟體的主要設計目的之一,便是將磁碟 I/O 最小化,因為磁碟的讀取和寫入,是電腦上最需要用到大量資源的作業之一。SQL Server 會在記憶體中建立緩衝集區,以保存從資料庫讀取的頁面。SQL Server 的大部分程式碼,主要是用來最小化磁碟和緩衝集區之間實體讀取和寫入數目。SQL Server 會嘗試在兩個目標之間取得平衡: 避免緩衝集區過大,造成整個系統的記憶體不足。 最大化緩衝集區的大小以最小化資料庫檔案的實體 I/O。

資料庫實在是IT又愛又恨的東西,以前公司的資料庫,大約在table成長到約100萬筆資料時,效能瞬間down到不能用,只能靠刪除資料的方式恢復效能,大約回到90萬筆就很快了,SQL Server你真行! Orz
不過比起另一個系統把預約單檔案(1~5KB),存放在另一台server的share folder(EMC DMX等級的SAN哦),等要用到時再去讀取,結果就是檔案到了約10萬個以後開始讀取寫入都會漏資料!! 最慘的是沒有log,無從找出問題。
現在回想起來,如果選擇用資料庫來處理這種需求。100萬筆資料vs.100萬個檔案,很明顯資料庫對100萬筆資料處理還算輕而易舉,DB雖然也會有瓶頸及tuning的問題,但好歹有方法可以依循,有架構可以利用,更重要的有很多工具找出問題。

在32-bit CPU memory 配置中

  • 8G的預設配置如下:
    OS 2GB
    APP 2GB(包含SQL SERVER及其它應用程式)
    剩餘4GB(未使用)
  • 8G的設定 /3GB 的配置如下:
    OS 1GB
    APP 3GB(包含SQL SERVER及其它應用程式)
    剩餘4GB(未使用)
  • 8G的設定 /PAE 的配置如下:
    OS 2GB
    APP 2GB(包含SQL SERVER及其它應用程式)
    剩餘4GB(給BUFFER CACHE資料快取使用)
  • 8G的設定 /PAE /3GB 的配置如下:
    OS 1GB
    APP 3GB(包含SQL SERVER及其它應用程式)
    剩餘4GB(給BUFFER CACHE資料快取使用)

在64-bit CPU memory 配置中

  • 8G的設定的配置(系統自行配置)如下:
    OS 1GB(可另行設定)
    剩餘7GB(包含SQL SERVER及其它應用程式)

    若你的記憶體超過16GB則不可設定 /3GB及/PAE,因為OS一定要吃2GB

    啟用 AWE 功能之後,SQL Server 就無法動態管理記憶體,簡單地說,就是它會用掉所有可用的記憶體


    參考: SQL Server的記憶體架構
    http://technet.microsoft.com/zh-tw/library/ms187499.aspx

前天裝好了x86-64的2003+sql2005想說把爛爛的server多榨出一點效能來,看能不能撐到user要的5年資料(估計150G),結果廠商來裝他們的軟體竟然說"我們的程式抓不到64位元os的odbc"...Orz
odbc不就是個API嗎?還會抓不到,真詭異。不過更詭異的還在後面,3台ap用odbc連線竟然只有一台連的到,還都在同網段。今天一不作二不休,就重灌成32bit的吧,果然就很順利了!! 想想可能是請廠商在裝os的時候,HP的導引光碟好像是拿成x86 32bit的...難怪裝好以後有幾樣裝置沒抓到,以後還是要多細心點,不要顧聊天 XD

2008年9月2日 星期二

SQL2005 tuning & testing

這幾天為了移轉一套sql2005所作的一些tuning,原來的server只有4GB Ram、2顆可憐的2.5" 10000轉 sas作raid1,整個系統慢到不行,這次移轉的新server(HP DL385G2)把Ram加到8GB,4顆sas作0+1...(當初採購時不知道廠商配Smart Array E200,連Raid5都沒有!! 硬碟也買太少),軟體裝standard win2003 x64+SQL2005 x64,希望效能會變好。 後來閒逛到介紹iometer的網頁,趁系統還沒上線來測看看IOPS...
想到上次去恆逸上課老師說SQL應該作磁碟重組,google找到一套IObit SmartDefrag,可以在win2003跑,還是免費軟體,等上線看看效能是否有提昇。

Server規格:
HP DL385G2 (AMD Opteron 1.8Ghz*2 / 4GB Ram)
IBM X3650 (Intel Xeon 2.0Ghz*2 / 4GB Ram / 3.5" 15000轉 sas*2)
DELL 6850 (Intel Xeon 2.6Ghz*4(4核) / 8GB Ram / 3.5" 15000轉 scsi*2)



Raid Controller:
HP Smart Array E200: 64MB cache, support raid 0/1/1+0
HP Smart Array P400: 256MB cache(大4倍!!), support raid 0/1/1+0/5/6
IBM ServerRAID 8K: 256MB cache, support raid 0/1/1+0/5/6
Dell PERC5/i: 256MB cache, support raid 0/1/1+0/5/6

測試參數:

  • Worker:4 (測dell 6850開到16)

  • Maximum Disk Size: 20000000 sectors(*512Bytes = 1GB)

  • # of Outstanding IO: 10 (值太小灌不滿效能)

  • Transfer Request Size: 8KB

  • Percent Read/Write Distribution: 33% Write, 67% Write, 100% Random

  • Run Time: 1 mins

  • Ramp Up Time:10 secs


接下來要PK大亂鬥啦:


E200,4顆硬碟作1+0,配置在2個channel


E200,2顆硬碟作1+0,配置在1個channel


P400,2顆硬碟作1+0,配置在2個channel


IBM,2顆硬碟作1+0,配置在1個channel



Dell,2顆硬碟作1+0,配置在1個channel

結論:

  • 作Raid1/1+0,raid controller的cache大小似乎影響不大,看P400跟E200數據差不多,E200不能作raid5,成本大概低很多(以後開規格要小心!!!)。(某論壇網友評語: E200是一塊半殘卡,LSI 1068E的,不帶處理器,做R0,R1凑和...)
  • Dell這張卡還滿多人用的樣子,不過測出來不怎麼樣,也許跟硬碟比較舊有關。
  • IBM還真是強啊!! HP用4顆作0+1都輸了。
  • 以上都是亂測,平台規格也不一致,只是參考用囉! 不過至少新的配置效能是有提昇的

    #iometer簡介#
    Iometer是目前業界量測儲存系統I/O效能的標準工具,可藉由負載產生器(Workers)的參數調整,透過測試元件產生不同區塊大小的輸入輸出請求與讀取/寫入的分布比例,模擬網路伺服器、檔案伺服器以及線上交易資料庫的讀寫行為。 由測試得出系統的最大I/O處理能力、傳輸速率與CPU占用率,使用者即可評估在不同應用環境下,伺服器儲存系統或是外接儲存設備的性能。
    Iometer本身是一套開放原始碼軟體,最新的版本為2006.07.27,可支援Windows、Linux、Solaris與Mac OS X等平臺。
    Iometer重要參數:Iometer內可調節的參數相當多,我們從一般效能測試中常用的一些參數,逐一簡單說明。

  • Worker:設定每個磁碟同時執行的執行緒(thread)數目。對一些高性能伺服器或企業級儲存設備,必須增加Worker數目,才能測得最大的效能。

  • # of Outstanding IO:設定每個磁碟同時發起I/O的數量,若是模擬串流檔案的播放或類似環境,可用預設值1。若要模擬同時有多個應用程式發出存取需求的環境,可依不同狀況設定。不過如果設太大的話,系統很可能會當機。

  • Transfer Request Size:每個I/O存取需求的Bytes大小,要測試系統最大I/O處理能力可設為512Bytes,要測試最大傳輸能力(MB/s)可設為128kB到512kB。

  • Percent Read/Write Distribution:讀取/寫入比例,模擬一般應用程式存取可設為50%讀+50%寫,或60%讀+40%寫;若要模擬備份寫入行為,可設為100%寫入;若要模擬還原動作,可設為100%讀取。若要讓GbE這類全雙工通道發揮最大效率,可設為50%讀+50%寫,以便啟動雙向傳輸。

  • Percent Random/Sequential Distribution:隨機/循序存取比例,若要模擬多媒體串流檔案播放,或是大量連續資料的備份/還原,可設為100%循序存取;若要模擬高交易資料庫,可設為100%隨機存取。

  • Run Time:測試執行時間,一般設為30到60秒。

  • Ramp Up Time:在測試某些擁有大量快取記憶體的系統時,為避免系統剛開始測試時一些異常或不穩定的數值,影響測試統計結果,可設定15到60秒的Ramp Up時間,等待系統進入穩定後再錄取測試數值。

2008年8月22日 星期五

IIS6的網頁壓縮設定

IIS 6.0中設定HTTP壓縮的步驟如下:

  1. 打開Internet訊息服務(IIS)管理器,"網頁服務延伸"按右鍵-->"新增網頁服務延伸"。
  2. 輸入名稱為"HTTP Compression","需要的檔案"為C:\WINDOWS\system32\inetsrv\gzip.dll,再把狀態改為"允許"。
  3. 使用notepad打開C:\Windows\System32\inetsrv\MetaBase.xml(先備份),找到Location ="/LM/W3SVC/Filters/Compression/gzip",如果需要壓縮動態檔案,則將HcDoDynamicCompression設定為"TRUE",並在HcScriptFileExtensions中新增要壓縮的動態檔案附檔名,如aspx;如果需要壓縮靜態檔案,則將HcDoStaticCompression和HcDoOnDemandCompression設定為"TRUE",並在HcFileExtensions中新增需要壓縮的靜態檔案附檔名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的壓縮率,數字越小壓縮率越低。
  4. 編輯完畢後儲存MetaBase.xml檔案;如果檔案無法儲存,則可能IIS正在使用該檔案。停止"IIS Admin Service"服務後即可儲存。重新啟動IIS,可以到http://www.pipeboost.com/ 網站驗證結果。
  5. 2008/8/26更新 這段也要設定才會啟動gzip壓縮

    IIsCompressionSchemes Location = "/LM/W3SVC/Filters/Compression/Parameters" HcCacheControlHeader="max-age=86400"
    HcCompressionBufferSize="8192"
    HcCompressionDirectory="%windir%\IIS Temporary Compressed Files"
    HcDoDiskSpaceLimiting="TRUE"
    HcDoDynamicCompression="TRUE"
    HcDoOnDemandCompression="TRUE"
    HcDoStaticCompression="TRUE"

我拿系統的一個aspx網頁測試得到底下的結果,有48.10%好像挺不賴吧,壓縮率設定是6,cpu loading沒有什麼增加。

2008年8月12日 星期二

[java excel] POI vs. jExcel

這兩天為了公事的一個小需要寫了一個轉檔程式, 來源檔是以;分隔的純文字檔, 要轉成xls格式, 還有一個附帶需求是資料筆數每60000筆, 需寫成新的sheet或xls檔案。
google了一下了解可用的api有POI-HSSF 及 JExcel 兩種, 首先採用POI-HSSF寫好程式, 測試來源檔大小: 8168KB, 資料筆數:69697,使用System.currentTimeMillis()計算時間
產生xls檔案需要時間約: 21944ms,
其中執行workbook.write(outputstream) 的時間佔了約: 15907ms!!
因為每次要轉的檔案是400多個, 檔案大小從1MB到60多MB, 用POI-HSSF轉完這些檔案大概需要4個小時! 在R6竟然也要這麼久,比我的測試機Intel C2D e6300還慢,有點意外
改用JExcel重新寫過, 測試同上的檔案得到結果為: xls檔案約: 6452ms, workbook.write() : 約1915ms!!
很明顯的速度改善, 兩種code的複雜度差不多, 除了在aix轉檔用String.getBytes()轉碼, 沒有碰到預期外的問題。

ps. 1. server為R6, 8GB Ram, OS是AIX5.2, Jdk1.5
2. 轉大檔時會碰到outofmemory, 在執行的參數加上 -mx1024m就沒問題
3. 在轉測試檔時從windows工作管理員觀察, POI-HSSF轉檔大約會用到550MB的記憶體, JExcel大約180MB
4. JExcel轉出來的xls檔案比POI-HSSF大一點, 但檢查資料無誤, 原因不詳
5. 版本: HSSF-POI 3.0.2-FINAL-20080204, JExcel 2.6.8
6. 執行時的系統狀況都只有一個cpu的loading, 這隻程式應該很適合改成multi-thread來跑...等我有空...

2008年8月10日 星期日

RSync、FreeNAS

Linux系統上有名的RSync,在windows環境可考慮使用DeltaCopy
搭配FreeNAS使用可以作很多種備份
(以上都還沒用過...)


08/22/2008更新
今天在公司要作server的備份,要用NFS,又臨時找不到有裝Linux/Unix的server,於是拿了FreeNas 0.68跟CentOS5.2的livecd暫時頂著用,結果FreeNas沒有一台開機成功的,連pc都開不起來,真是...
CentOS倒是很乖的run起來,然後接上廠商的300GB usb hd,format成ext3竟然花了1小時,也許是usb外接的關係。但是用NFS傳檔速度竟然是超慢的1MB/s,檢查usb mode確實是2.0,用隨身碟傳檔案測試速度也滿快的,但是經過NFS或是從Livecd copy檔案就不行了,大概是因為是用live cd在跑的關係吧

test test

第一篇總是要來個測試...