top of page
Yazarın fotoğrafıDERYA KALE ERDEMLİ

SQL Server Üzerinde SAP Veri Tabanı Index Bakımı

ERP sistemleri, kurumların yoğun verisi altında çalışırken performanslı çalışmaları hem çalışanın çalışma motivasyonunu olumlu etkiler hem de işlemlerin akıcı olması zamanın verimli kullanılmasını sağlar. ERP sistemlerinin performansını etkileyen en önemli konulardan biri de verilerini üzerinde sakladığı veri tabanı sisteminin performans bakımıdır. Bu yazımızda SQL Server üzerinde çalışan SAP sisteminde ki tabloların indeks bakımı işlemini inceleyeceğiz.


SQL Server üzerinde yer alan görev tanımlayıcı ile bütün tabloların indeks bakımı yapıldığında sayısı yüz bin üzerinde olan tabloların bakımı hem çok uzun sürecek hem yüzlerce GB’lık verinin indekslenmesi sırasında yine yüzlerce GB log verisi ortaya çıkacaktır ki bunu yedeklemek ciddi bir maliyet olarak karşımıza çıkacaktır. Tabloların toplu bakımı yerine aşağıda tarif edeceğimiz şekilde tasarlanacak bir yapıda indeks bakımını ciddi oranda kolaylaşacaktır.


Yapımızı adım adım kurmaya başlayalım.


  1. Aşağıdaki ekran görüntüsünde görüldüğü yapıda bir tablo ile indeks bakımının yapılmasını istediğimiz tabloların bilgilerini kaydediyoruz. Tablo alanlarının açıklaması aşağıdaki gibidir:

  2. ZSCHEMA : SQL Server üzerinde SAP tablolarının çalıştığı şema adıdır.

  3. ZMODUL : Tablonun birinci derece hangi SAP modülü ile ilgili olduğunun tutulduğu alandır.

  4. ZTABLE : Bakımının yapılması istenen tablo adıdır.

  5. ZREBUILD : Job çalışma sırasında tablonun index bakımının yapılıp yapılmayacağını belirtir. X işaretli olması rebuild işleminin yapılacağını belirtir.

  6. ZISTATISTIK : Job çalışma sırasında tablonun istatistik güncelleme işleminin yapılıp yapılmayacağını belirtir. X işaretli olması istatistik güncelleme işleminin yapılacağını belirtir.


Rebuild ve istatistik bakımlarının iki farklı alanda tutulma sebebi, bazı tablolarda rebuild yapılmayıp sadece istatistik güncelleme işleminin yapılmak istenebileceğidir. Ya da rebuild yapılıyorken geçici olarak işlemi iptal etmek için X işareti kaldırılabilir.



Tabloya örnek veri girişimiz aşağıdaki gibidir.




SAP tarafında tabloyu hazırladıktan sonra şimdi de sıra SQL Server tarafında işlemi yapacak olan ilgili stored prosedürü yazmaya geldi sıra.


CREATE PROC [dbo].[REBUILDINDEXES]

@TABLENAME AS VARCHAR(1000)='%',

@FILLFACTOR AS INT=70,

@SCHEMA AS VARCHAR(3),

@REBUILD AS VARCHAR(30) = '',

@STAT AS VARCHAR(30) = ''

AS


DECLARE @FRAGMANTATIONBEFORE AS FLOAT


DECLARE @TABLENAME2 AS VARCHAR(1000)

DECLARE CRS CURSOR FOR SELECT name FROM sysobjects WHERE xtype='U' AND name LIKE @TABLENAME

OPEN CRS

FETCH NEXT FROM CRS INTO @TABLENAME2

WHILE @@FETCH_STATUS=0

BEGIN


                        SET @TABLENAME2 = @SCHEMA+ '.' + @TABLENAME2 -- şema adı ekle


                        SELECT @FRAGMANTATIONBEFORE=avg(avg_fragmentation_in_percent) FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID(@TABLENAME2), NULL, NULL , 'LIMITED')

            --         WHERE index_type_desc <>'CLUSTERED INDEX'



                        DECLARE @SQL AS NVARCHAR(MAX)


                        IF @REBUILD = 'X' and @FRAGMANTATIONBEFORE > 25

                        BEGIN

                                               SET @SQL='ALTER INDEX ALL ON '+@TABLENAME2+' REBUILD WITH (FILLFACTOR='+CONVERT(VARCHAR,@FILLFACTOR)+', ONLINE = ON)'

                        EXEC sp_executesql @SQL

                        END



                        SET @SQL='UPDATE STATISTICS '+@TABLENAME2

                        IF @STAT = 'X'

                        BEGIN

                        EXEC sp_executesql @SQL 

                        END




FETCH NEXT FROM CRS INTO @TABLENAME2

END

CLOSE CRS

DEALLOCATE CRS


GO




Oluşturulacak REBUILDINDEXES stored prosedürü ile kendisine gelen parametreleri kullanarak dinamik SQL oluşturulup bu sorgu çalıştırılır.

İşleme başlamadan önce @FRAGMANTATIONBEFORE değişkenine tablonun bozulma oranı atanıyor. Bu atama ile bozulma belli bir oranın üstünde ise rebuild işlemi yapılmış oluyor. Prosedürün var sayılan değeri 25 olarak ayarlanmış, siz kendinize göre de bu değeri değiştirebilirsiniz.



Şimdi de SAP tablosundan bakımının yapılması istenen tabloları alıp yukarıda oluşturduğumuz stored prosedürü çalıştırarak indeks bakımını başlatacak olan prosedürü yazalım.


CREATE PROC [dbo].[BUILDTABLESFROMLIST]

AS


DECLARE @SCHEMA2 VARCHAR(3)

DECLARE @TABLENAME2 VARCHAR(200)

DECLARE @REBUILT AS VARCHAR(1)

DECLARE @STAT2 AS VARCHAR(1)

declare @disksize int


DECLARE CRS1 CURSOR FOR SELECT [ZSCHEMA], [ZTABLE], [ZREBUILD], [ZISTATISTIK] FROM msp.ZIT_T001

OPEN CRS1

FETCH NEXT FROM CRS1 INTO @SCHEMA2, @TABLENAME2, @REBUILT, @STAT2


WHILE @@FETCH_STATUS = 0

BEGIN


SET @SCHEMA2 = LOWER(@SCHEMA2)




SELECT

@disksize = convert(int,dovs.available_bytes/1048576.0)

FROM sys.master_files mf

CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) dovs where dovs.volume_mount_point = 'P:\'


if @disksize > 100000

            begin

                        exec dbo.REBUILDINDEXES @TABLENAME = @TABLENAME2, @SCHEMA = @SCHEMA2, @REBUILD = @REBUILT, @STAT = @STAT2

            end


else

            begin

                        close CRS1

                        DEALLOCATE CRS1

            end



FETCH NEXT FROM CRS1 INTO @SCHEMA2, @TABLENAME2, @REBUILT, @STAT2

END


CLOSE CRS1

DEALLOCATE CRS1

GO



Bu prosedürü kullanmadan önce kendimize göre düzenlememiz gereken iki parametre vardır. Bunlar aşağıdaki gibidir:


“where dovs.volume_mount_point = 'P:\'” satırında yer alan P ifadesini SAP veri tabanımızın T-LOG dosyasının bulunduğu disk harfi ile değiştirmemiz gerekmektedir.

Diğer parametre ise:

“if @disksize > 100000” satırındaki 100000 değeridir. Burada yapılmak istenen işlem de ilgili diskte boş alan 100 GB üzerinde ise bakımın yapılmasını sağlamaktır.




Bütün bu tamamlamalar yapıldıktan sonra geriye kalan tek işlem SQL Server’da indeks bakımını yapacak joba görev olarak BUILDTABLESFROMLIST stored procedürünü vermektir.


Örnek görev aşağıdaki gibidir:



Sait Orhan

Bilgisayar Mühendisi


100 görüntüleme0 yorum

Son Yazılar

Hepsini Gör

Kommentare

Mit 0 von 5 Sternen bewertet.
Noch keine Ratings

Rating hinzufügen
bottom of page