Warning: Invalid argument supplied for foreach() in /home/veritaba/domains/veritabani.org/public_html/wp-content/themes/seub/functions-74.php on line 1735
Modern veri merkezlerinde ve büyük ölçekli bilişim sistemlerinde, sistemlerin esnekliği ve verimliliği üzerine yapılan çalışmalar, partition switch’lerin (bölünme anahtarları) kritik rolünü giderek daha belirgin hale getirmektedir. Bu yazımızda sizlere Partition Switch işleminden bahsedeceğim. Partition Switch öncesi Partition işleminin nasıl yapıldığı hakkında bilgi almak için Duran BÜYÜKÖZTÜRK hocamın SQL Server Table Partition Oluşturmak makalesine göz atabilirsiniz.
Öncelikle yapısal olarak birebir eş iki tablo oluşturuyoruz (Alan sayıları ve alanların Data tipleri eşit ve her ikisi de aynı Partition schema üzerinden partiton yapılmış).
Resimde görüldüğü üzere içerisinde veri bulunan tablomuz ‘Satislar’, İçerisine switch işlemi ile verileri atacağımız tablomuz ‘Satislar2’. Bu iki tablo yapısal olarak birbirleriyle eş tablolardır ve aynı partition schema üzerine partition yapılmıştır.
SELECT p.partition_number,p.partition_id, fg.name AS [filegroup],r.boundary_id, CONVERT(DATE,r.value) AS BoundaryValue, p.rows FROM sys.tables AS t INNER JOIN sys.indexes AS i ON t.object_id = i.object_id INNER JOIN sys.partitions AS p ON i.object_id = p.object_id AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON a.container_id = p.hobt_id INNER JOIN sys.filegroups fg ON fg.data_space_id = a.data_space_id INNER JOIN sys.partition_schemes AS s ON i.data_space_id = s.data_space_id INNER JOIN sys.partition_functions AS f ON s.function_id = f.function_id LEFT OUTER JOIN sys.partition_range_values AS r ON f.function_id = r.function_id AND r.boundary_id = p.partition_number WHERE i.type <= 1 AND a.type = 1 AND t.name= 'Satislar' ORDER BY p.partition_number DESC;
Yukarıda görmüş olduğunuz script yardımı ile ‘Satislar’ tablosunda hangi partition’da kaç adet veri olduğunu görebiliriz.
Satislar tablomuza SatisTarihi kolonuna göre Partition yapıldı ve tablomuzda toplamda 830 kayıt bulunmaktadır. Satislar2 Tablomuzun içerisinde veri bulunmamaktadır. Peki biz Satislar tablomuzda bulunan ‘1996’ yılına ait verileri Satislar2 tablomuza taşımak istersek bunu DML yöntemiyle yapabiliriz fakat ‘1996’ yılına ait 154 kaydı ‘Satislar’ tablomuzdan Satislar2 tablosuna INSERT etmemiz daha sonra da Satislar tablomuzdan bu kayıtları silmemiz gerekecekti. Unutmayalım ki kayıt sayımız her zaman bu kadar az olmayacak ve bu işlem belkide günler sürecekti. Tam olarak bu durumda Partition Switch çok işimize yaracaktır.Burada dikkat edilmesi gereken hedef partiton’ın mutlaka boş olması gerektiği (Switch öncesi Satislar2 tablomuzun ikinci Partitionın’da hiç data olmamalı). Resimde görüldüğü üzere 1996 tarihli kayıtlar 2 numaralı partition’da tutulmaktadır. Bu tarih aralığındaki verileri Satislar tablosundan Satislar2 tablosuna yukarıdaki script yardımı ile DML işlemlerine gerek kalmadan taşıyabiliriz. Şimdi bu işlem sonrası tablolarımızı kontrol edelim.Partition Switch işlemi sonrası ‘Satislar’ tablomuzda bulunan 154 kayıt ‘Satislar2’ tablosuna taşıma işlemi gerçekleştirilmiştir.
0 Yorum