2008年9月30日 星期二
SQL定序
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限制
要求物件 錯誤 '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
從工作管理員看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+
大部分原因是出在對該資料夾的寫入權限不足,或是沒有先產生該資料夾造成
-- 那你寫這什麼訊息啊! (/‵Д′)/~ ╧╧
微軟對該問題的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)
SQL2005 part3
預設會停用 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
所有資料庫軟體的主要設計目的之一,便是將磁碟 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
想到上次去恆逸上課老師說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
結論:
- 作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時間,等待系統進入穩定後再錄取測試數值。