2012年12月26日 星期三

SQL PASS 2013年一月分聚會邀請與通知

2013年的第一個月,很高興的受到台灣SQL PASS的邀約,與大家分享議題,希望各位 SQL Server 同好踴躍報名,也希望可以與現場的各位互相討論與分享,詳細的資訊如下,再請參考。

主題:我在微軟學習SQL Server的生活
講師:台灣微軟 SQL Server 技術支援團隊/第一屆 SQL Hero 盟主 Cary
日期:2013/01/17 18:30~21:00
地點:果子咖啡(台北市民生東路三段140巷11號)
費用:最低消費150元
備註:請於報名時選擇餐點或飲料
報名網址:http://sdrv.ms/RMsj4l


參考地圖:
檢視較大的地圖

2012年12月21日 星期五

如何在Excel 2013中使用PowerView

        我在前面花了很多的章節介紹如何架設PowerView的環境,但坦白說環境的細節繁多,所以無法快速的應用,但好消息的是,在Office 2013中,透過Excel已經可以快速的使用PowerView的功能,所以我們就來介紹如何透過Excel進而設計PowerView。


參考連結:
PowerView環境安裝與建置
http://caryhsu.blogspot.tw/2012/09/powerview.html



我們就以下列網址中提供的範例進行介紹,下列是Olympics選手的參選資料,我們將透過這個檔案來一步一步的說明,並介紹PowerView中的新地圖 (Map) 元件。



1、啟用PowerPivot與PowerView的增益集。

首先在我們開啟Excel後,請先點選 [檔案] -> [選項] -> [增益集],在下方中的 [管理],請選擇 [COM 增益集],然後請選擇 [Microsoft Office PowerPivot for Excel 2013] 與 [PowerView] 兩個項目後,選擇確定即可。



2、點選 [PowerPivot] 的頁籤後,先將你的資料全選後,再點選 [加入至資料模型],此時會跳出一個視窗,由於我們的資料第一行有包含標題,所以請將視窗中的 [我的資料表 (含標題)] 勾選起來後,再選確定即可。

3、建立好後,就會跳出PowerPivot的視窗與連結的資料。


4、選擇 [插入] -> [PowerView],如果你是第一次使用時,這時候會請你安裝Sliverlight,裝完之後,即會出會PowerView的設計畫面。


5、請勾選 [PowerView 欄位] 中的 Country(IOC) Code與 Name的欄位,然後在Name的欄位中,選擇 [計數 (不是空白)]。



6、此時請點選表格後,再點 [設計] -> [地圖],即可完成。

此時你就可以看到他會將原本統計各個國家選手數量的分析表,透過地圖的方式秀出,而圓圈的大小就是代表選手的多寡,透過這個方式,可以原本單純的數字,透過直覺化的方式進行呈現,更一目了然。



參考連結:
Visualizing the Olympics with Power View in Excel 2013: Day 1
http://blogs.msdn.com/b/seanboon/archive/2012/07/30/visualizing-the-olympics-with-power-view-in-excel-2013-day-1.aspx


關鍵字:PowerViewExcel 2013Reporting ServiceMicrosoft BISSRS

2012年12月18日 星期二

如何管理遺失索引與維護索引的最佳數量

        在我的前面幾篇中已有介紹到多種進行索引的管理與維護的方法,但本篇再介紹實際上Index的數量與Missing Indexes的相關介紹,基本上相信大家多少對Missing Indexes有相當的了解,所謂Missing Indexes就是你的查詢在執行時,由於沒有增加索引,所以造成查詢必需從頭掃到尾,也就是造成Table Scan。

         在進行分析後,許多的客戶對於Missing Indexes有點難抉擇,因為他們的表格中已有相當多的Index存在,加了之後反而可能會有效能更慢的問題,的確Index會加快Select的速度,減少 Table Scan,但是相對的也會增加Insert與Update的執行時間,所以本篇我們就來介紹如何進行這些相關的作業。

先行參考文章:
索引分析與維護建議
http://caryhsu.blogspot.tw/2012/02/blog-post_14.html
SQL Server 上大型資料表的索引效能調整與維護
http://caryhsu.blogspot.tw/2011/08/sql-server.html
效能調整 - 填滿因數對資料庫的影響
http://caryhsu.blogspot.tw/2012/02/blog-post.html


Missing Indexes查詢:
下列的語法可以查出目前系統 "從開機" 到目前的執行統計,藉以找出查詢中沒有使用到Index也就是使用Table Scan的查詢有那些。

PS:因為下列的語法是透過DMV進行查詢,所以如果你希望一直保持記錄與資訊的話,建議你可以將資訊回寫於Table中。


SELECT Top 10
    statement AS [database.scheme.table],
    column_id , column_name, column_usage,
    migs.user_seeks, migs.user_scans,
    migs.last_user_seek, migs.avg_total_user_cost,
    migs.avg_user_impact
FROM sys.dm_db_missing_index_details AS mid
    CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
    INNER JOIN sys.dm_db_missing_index_groups AS mig
    ON mig.index_handle = mid.index_handle
    INNER JOIN sys.dm_db_missing_index_group_stats AS migs
    ON mig.index_group_handle=migs.group_handle
ORDER BY migs.avg_user_impact DESC


基本上述的查詢在Column_usage有三種類型,EQUALITY、INEQUALITY、INCLUDE,在建立Index也會不同,詳細的資訊可以參考下列的第一個網址,將會介紹如何透過此語法並實際的建立Index。

現在另外一個問題來了,就是如果我的表格中已有多個Index時,是否該如何選擇合適的Index,所以透過上一個查詢中找出Missing Indexes的部份,當然也可以找出較不常用的Index,所以就可以藉此將沒有使用到或不常使用的索引給刪除,藉以提高索引的最大效能。


找出未使用的索引(Index):
SELECT OBJECT_SCHEMA_NAME(I.OBJECT_ID) AS SchemaName,
       OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
       I.NAME AS IndexName
FROM sys.indexes I
WHERE
-- only get indexes for user created tables
OBJECTPROPERTY(I.OBJECT_ID, 'IsUserTable') = 1
-- find all indexes that exists but are NOT used
AND NOT EXISTS (
SELECT index_id
FROM sys.dm_db_index_usage_stats
WHERE OBJECT_ID = I.OBJECT_ID
               AND I.index_id = index_id
               -- limit our query only for the current db
               AND database_id = DB_ID())
ORDER BY SchemaName, ObjectName, IndexName

找出較不常使用的索引(Indexes):
declare @dbid int
select @dbid = db_id()

select objectname=object_name(s.object_id), s.object_id,
          indexname=i.name, i.index_id,
          user_seeks, user_scans, user_lookups, user_updates
from sys.dm_db_index_usage_stats s, sys.indexes i
where database_id = @dbid and
      objectproperty(s.object_id,'IsUserTable') = 1
      and i.object_id = s.object_id
      and i.index_id = s.index_id
order by (user_seeks + user_scans + user_lookups + user_updates) asc


參考網址:

關鍵字:SQL ServerIndexMiss Indexeshow to evaluate and manage indexes索引維護

2012年12月2日 星期日

SQL Server - 初使連線過慢問題處理

        最近接到一個Case,客戶表示他有多台電腦,但是有特定的電腦連線到SQL Server時都會特別的久,但是其他的電腦都不會,而且透過電腦名稱(Host Name)或IP結果都相同,而且當下觀察Server與Client端的資源與效能都很正常,所以當下猜想,或許與網路有相關,這個是問題最後是透過網路封包分析後才找出問題並解決的,所以在此將這個案例分享出來。

        由於網路的部份可能牽涉會有很多的層面,所以進一步與客戶確認,如是否為同一網址,防火牆的設定等,最後決定透過網路封包分析的方式進行確認,所以我就請客戶透過Netmon的程式進行兩邊封包的收集,封包分析如下:

PS:netmon是Microsoft所推出的一套免費的封包捉取與分析的工具,大家可以透過下列的網址進行下載,也請大家多多利用。

<br>

下載連結:
Microsoft Network Monitor 3.4
http://www.microsoft.com/en-us/download/details.aspx?id=4865


問題分析:
1、在有問題的電腦封包上發生在一開始的初使連線都需要等待5秒的時間,才可以與Server建立連線。

2、在正常電腦上的封包,發現很快的就可以建立連線。

3、在Server上的封包看到也是相同需要5秒的時間才可以正常的連線。

4、確認主機上的效能資訊,看起來也是正常。


解決方式 :
根據上述的分析,與網路Team的同事討論後,懷疑可能是系統網路中的一個New Feature所造成,後來嘗試下列的步驟將此功能關閉後,問題就解決了。

Set the EnableTCPA registry entry to "0" on the SQL Server computer.
To do this, follow these steps:
1.      Click Start, click Run, type regedit, and then click OK.
2.      Locate the EnableTCPA registry entry under the following registry subkey:
         HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.      Right-click EnableTCPA, and then click Modify.
4.      In the Value data box, type 0, and then click OK.
5.      Exit Registry Editor.
6.      Restart Computer.


參考知識文件:
A Windows Server 2003-based computer responds slowly to RDP connections or to SMB connections that are made from a Windows Vista-based computer
http://support.microsoft.com/kb/947773


關鍵字:SQL ServerNetwork MonitorNetwork PacketSQL Server Connectity