MSSQL Hash Partition
MSSQL Hash Partition,SQL server da çok sayıda insert işlemleriniz var ve bu işlemler artık yavaş olmaya başladı ve hızlandırmak istiyorsanız ,hash partition tam size göre.
SQL server da PAGELATCH_EX bekleme tipi olduğu zamanlarda hash partition bunun önüne geçerek daha hızlı çözüm üretmektedir.
Hash partition aynı page’e yazılırken beklenmesin diye genellikle kullanılan yöntemdir ve bu yöntem sayesinde insertlerimizi hızlandırabiliriz.
İlk olarak partition Functionımızı oluşturuyoruz.
CREATE PARTITION FUNCTION [p_hash_funct](tinyint) AS RANGE LEFT FOR VALUES (0,1,2,3,4,5,6,7,8,9,10,11)
GO
Function oluşturulduktan sonra partition schema oluşturuyoruz.
CREATE PARTITION SCHEME [ps_hash_schema] AS PARTITION [p_hash_funct] TO ([TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP], [TABLESGROUP])
GO
Function ve schema oluşturduk . Hash Partition olarak kullanabilmemiz için yeni tablomuzu oluşturuyoruz.
CREATE TABLE dbo.frk_d1
(
pkDashboard bigint NOT NULL IDENTITY (1, 1),
hastane varchar(20) NULL,
tarih date NULL,
tanim varchar(20) NULL,
deger int NULL,
Aktarim_Zamani datetime NOT NULL,
HashID AS (CONVERT([tinyint],abs(binary_checksum([pkDashboard]%(30))))) PERSISTED NOT NULL) ON [ps_hash_schema](HashID)
GO
Yukarıda HasHId kolonumuza dikkat edersek “AS (CONVERT([tinyint],abs(binary_checksum([pkDashboard]%(30))))) PERSISTED NOT NULL) ON [ps_hash_schema](HashID)” yazıldığını görmekteyiz burada “dbo.frk_d1” isimli tablomuzu oluşturduğumuz partition schema üzerinde oluşturmak için parametre ekleyerek partition’lı şekilde oluşmasını sağlıyoruz.
Tablomuzu oluşturduk fakat indexlerimizi de oluştururken aşağıdaki şekilde eklememiz gerekiyor.
CREATE UNIQUE CLUSTERED INDEX CIX_Hash ON dbo.frk_d1
(
pkDashboard,
HashID
) WITH( PAD_INDEX = OFF, FILLFACTOR = 90, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON ps_hash_schema(HashID)
GO
Yukarıda görüldüğü gibi oluşturduğumuz index de ” ps_hash_schema(HashID) ” isimli partition şema üzerinde ve HashID kullanarak oluşturmaktayız.