設計分散式資料分割檢視
在設計一套分散式資料分割檢視以實作資料庫伺服器聯盟時,您必須考慮下列事項:
判斷應用程式所執行的 SQL 陳述式模式
判斷資料表相互間的關聯。
使 SQL 陳述式的頻率與由分析外部索引鍵所定義的資料分割相符合。
定義 SQL 陳述式路由規則。
應用程式所執行的 SQL 陳述式模式
列出應用程式在一般處理過程中所將執行之 SQL 陳述式的清單。將清單分為 SELECT、UPDATE、INSERT 與 DELETE 類別,然後依據執行頻率的多寡在每個類別中將清單排序。如果 SQL 陳述式參考預存程序,請從預存程序中使用基本的 SELECT、INSERT、UPDATE 與 DELETE 陳述式。若您在分割現有的 SQL Server 資料庫,可以使用 SQL Server Profiler 來取得這類清單。
對於使用 SQL 陳述式之頻率,建議您參考那些使用分散式資料分割檢視效果最好的線上交易處理 (OLTP) 或網站資料庫,以取得他們的近似值。這些系統的特徵是具有個別的 SQL 陳述式,而這些陳述式跟決策支援 (或 OLAP) 系統中的查詢類型相較之下,所擷取的資料量較少。若每個 SQL 陳述式所參考的資料量很小,則只要研究每個陳述式的頻率,即可得出系統中合理的資料傳輸量近似值。然而,許多系統都會有一些參考大量資料的 SQL 陳述式群組。您可以執行額外的步驟為這些查詢進行加權,以反映它們較大量的資料需求。
資料表的關聯性
其目的是要找出可在相同維度中進行資料分割的資料表叢集 (例如,零件編號或部門編號),讓該維度之單獨出現的所有相關資料列,都放置到相同的成員伺服器上。例如,您可以決定以區域來對資料庫進行分割。若要支援這項作業,即使資料表的索引鍵中並沒有區域編號,它們也必須能夠使用與區域相關的方式進行資料分割。在這類資料庫中,即使 Customer 資料表並沒有區域編號的資料行,如果區域定義為整個州或省的集合,則可以使用 Customer.StateProvince 資料行以和區域相關的方式進行客戶的資料分割。
要找出分割資料的方法,外顯與隱含的外部索引鍵是可檢視的主要項目,因為它們定義資料表之間的關聯。研究外顯的外部索引鍵定義,以判斷查詢通常如何使用資料表中的資料列來尋找其他資料表中的資料列。即使是在沒有特定外部索引鍵定義的情形下,您也需要研究隱含外部索引鍵,或是研究 SQL 陳述式在聯結作業中,使用某個資料表中資料列的值參考其他資料表中資料列的方式。因為隱含的外部索引鍵並非明確定義為資料庫結構描述的一部份,您必須檢視應用程式所產生的 SQL 陳述式,以瞭解是否有陳述式是使用非索引鍵資料行來聯結資料表。這些隱含外部索引鍵通常會編列到索引中,以增進連結效能。因此,您應同時檢視資料庫中定義的索引。
針對資料分割的 SQL 陳述式頻率
使 SQL 陳述式的頻率與由分析外部索引鍵所定義的資料分割相符合。選擇能以最佳方式支援您應用程式的 SQL 陳述式之組合的資料分割方式。如果有些資料表組可以用一種以上的方式進行分割,請使用 SQL 陳述式的使用頻率來判斷哪一種分割方式適合最大數量的 SQL 陳述式。您應該先分割 SQL 陳述式最常參考的資料表。請依據資料表被參考的頻率,排定其被分割的先後順序。
SQL 陳述式的模式也會影響您對於分割資料表方式的決策:
如果參考資料表的陳述式超過 5% 是 INSERT、UDATE 或 DELETE 陳述式,並且資料表可以依據您所選擇的維度進行分割,則此資料表可進行分割。
如果參考資料表的陳述式少於 5% 為 INSERT、UDATE 或 DELETE 陳述式,則在每個成員伺服器上保留完整的參考資料表副本。您也必須定義進行更新的方式,以便讓資料表的所有副本都能被更新。如果必須具備高交易完整性,您可以編寫觸發程序的程式碼,來執行在分散式交易內容中所有副本的分散式更新。如果不需要高交易完整性,您可以使用 SQL Server 的其中一種複寫機制,將一個資料表副本的更新傳播到所有其他副本上。
如果參考資料表的陳述式超過 5% 是 INSERT、UDATE 或 DELETE 陳述式,而資料表無法依據您所選擇的維度進行分割,則不要將此資料表分割或複製。
SQL 陳述式路由規則
路由規則必須能定義哪個成員伺服器可以最有效率地處理每個 SQL 陳述式。它們必須建立使用者輸入的內容與成員伺服器 (包含用以完成陳述式所需的大量資料) 之間的關聯。應用程式必須能取得使用者輸入的資料,然後與路由規則對應,來決定必須處理 SQL 陳述式的成員伺服器。