[KB]如何讓DBA精準的掌握效能不好的網頁?
身為一個DBA,最痛恨的應該是知道某個網站效能不好,但是又苦於無法找出這個麻煩的網頁。
那要怎麼作才能達到這個需求?
在連線字串中,可以透過設定Applicaion Name,然後在SQL Profiler查到一些相關資訊:
1.
還沒加Application Name之前:
你會發現,當網頁連接時,Application Name因為是透過.Net SqlClient Data Provider來作連結,所以這邊顯示就是「.Net SqlClient Data Provider」。
2.
如果在連線字串(ConnectionString)加上Application Name呢?
"Data Source=localhost;Initial Catalog=MyTest;Integrated Security=True;Application Name=ERP"
只要在連線字串簡單的加上Application Name=系統名稱,SQL Server的DBA就可以比較輕鬆的找到發生問題的系統。
但是,如果想要更明白的知道是那個網頁發生問題,要怎麼處理?
1: Dim connStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("MyTestConnectionString").ConnectionString
2:
3: Dim conn As New System.Data.SqlClient.SqlConnection(connStr & "&Page=Default")
4: Dim cmd As New System.Data.SqlClient.SqlCommand("SELECT * FROM [T1]", conn)
5: Dim da As New System.Data.SqlClient.SqlDataAdapter(cmd)
6: Dim dt As New Data.DataTable
7:
8: da.Fill(dt)
9:
10: GridView1.DataSource = dt
11: GridView1.DataBind()
在連線字串的處理中,我們多加了一個這個網頁的名稱,然後在SQL Server Profiler中就可以看到:
那如果是用DataSource當來源呢? 我們可以去它的selecting事件中處理(如果是Insert、Update、Delete事件,請在對應事件處理)
1: Protected Sub SqlDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting
2: e.Command.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("MyTestConnectionString").ConnectionString & "&PageIsDefault"
3:
4: End Sub
那如果是用強型別的SQLDataAdapter呢?
可以透過Partial Class去處理:
1: Namespace DataSet1TableAdapters
2: Partial Class T1TableAdapter
3: Private _conn As System.Data.SqlClient.SqlConnection
4: Public Property MyConnStr() As System.Data.SqlClient.SqlConnection
5: Get
6: Return _conn
7: End Get
8:
9: Set(ByVal value As System.Data.SqlClient.SqlConnection)
10: Me._conn = value
11: For Each cmd As Data.SqlClient.SqlCommand In Me.CommandCollection()
12: If cmd IsNot Nothing Then
13: cmd.Connection = _conn
14:
15: End If
16: Next
17: If Me.Adapter.InsertCommand IsNot Nothing Then
18: Me.Adapter.InsertCommand.Connection = _conn
19:
20: End If
21: If Me.Adapter.UpdateCommand IsNot Nothing Then
22: Me.Adapter.UpdateCommand.Connection = _conn
23:
24: End If
25: If Me.Adapter.DeleteCommand IsNot Nothing Then
26: Me.Adapter.DeleteCommand.Connection = _conn
27:
28: End If
29: End Set
30: End Property
31: End Class
32: End Namespace
然後頁面上這樣呼叫:
1: Dim da As New DataSet1TableAdapters.T1TableAdapter
2: da.MyConnStr = New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("MyTestConnectionString").ConnectionString & "&StrongPageIsDefault")
3:
4: GridView1.DataSource = da.GetData()
5: GridView1.DataBind()
透過這種方式,雖然在開發上會麻煩一點,但是在後續的管理上,可是會輕鬆許多,讓公司的SQL Server DBA可以比較好找到問題發生的網頁。
希望以上的資訊對您有所幫助。 ^^
如果您有微軟技術開發的問題,可以到MSDN Forum發問。
如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。