SQL Server Performans Düşüşü ve Nedenleri

22 Ağustos 2021 Pazar

SQL Server’ın en büyük problemlerinden biri performansdır. SQL Server performans problemlerinde CPU ve Memory yükseltilir veya çalışılır.  Bazı durumlarda performans problemlerine yol açar:

- İstatistik Hataları: Datanın, kullanımda en çok ihtiyaç duyulan index’lerdir. İndex’lerin de etkili bir şekilde kullanılmasında da statisticslerin doğru yapılandırılması çok önemlidir.

Statistics bakımları zamanında doğru bir şekilde yapılmadığı takdirde, query optimizer doğru düzgün çalışamayacak ve sorgularda performans sorunları yaşanacaktır. Statistics’lerin Out-of-date diye tabir edilen, tarihi geçmiş olmaması önemlidir.

- Hatalı Sorgular: Sorgunun mutlaka yeni veya mevcut index’leri kullanması gerekir.. Maliyet yani cost değerlerine dikkat edilmeden çalıştıırılan SQL sorguları, optimizer’ın uygun indeksleri seçmesini engeller. SQL kodlarının/sorgularının DBA Admin tarafından incelemesi ve denetlenmesi gerekmektedir.

Deadlock’lar ve Blocking’ler: Birden fazla aynı anda çalışan prosesler, aynı veri kaynağında değişiklik yapamazlar.

Bir satırdaki veriyi, aynı anda güncellemek istediğiniz de, SQL Server buna izin vermeyecektir. Veri bütünlüğünü sağlamak için blocking mekanizmasını devreye girer. Bu mekanizma veri sağlığı için gayet başarılı bir kurgudur. Fakat blockinglerin sürekli ve sık sık yaşanması, SQL Server’da yavaşlıklara neden olacaktır. Sürekli yaşanan blockingler, bir sorun olduğunun göstergesidir.

Blockingler ile ilişkili fakat farklı bir sorun ise deadlock’lardır. Deadlock’lar, ortak bir kaynağa erişmeye çalışan iki prosesin birbirini kilitlemesi ile başlayan, ardından query engine’nin en az maliyetli olan prosesi kill etmesiyle son bulan bir operasyondur. Bu kill edilen prosese deadlock victim denir.  Bir sorgunun çalışma zamanı, blocking ve deadlocklardan olumsuz bir şekilde etkilenir.

Hatalı Transact Yazımı:  Cursor kullanımları ve gereksiz döngüler , subquerylerde ve joinlerdeki döngüyü gözden kaçırmanıza neden olabilir. Cursor yerine while operatörünü kullanmak ve sorgularınızı while döngüsü ile optimize etmek daha iyi olur.

Sıkça yapılan SELECT * kullanımları da gereksiz IO tüketimlerine sebep olacaktır, * alanların isimleri yazılmalıdır. ORDER BY,  SQL Server üzerinde sorting yani sıralama yapmak yerine bu işlemi yazılım tarafında yapmak, hem SQL Server performansına fayda sağlayacaktır, hem de dataların yazılıma daha hızlı gelebilir.


Share/Bookmark

0 comments :