Bu makalede modern veri tabanı sistemlerinde verimliliği artıran HashTable, HashIndex ve Hashpartition yapılarını inceleyeceğiz. Bu kavramların nasıl çalıştığını, avantajlarını, dezavantajlarını ve pratik kullanım örneklerini SQL kodlarıyla açıklayacağız. Hash tabanlı bir veri yapısı tasarlayacağımız ortamda bilmemiz gereken özellikle hash partitioning ya da bucketing gibi bölümlendirme stratejilerinde sıkça karşımıza çıkacak bir parametre olan bucket_count, verilerin kaç adet bucket içine dağıtılacağını belirleyen sayısal bir değerdir. Her bir bucket, belirli bir hash değeri aralığına denk gelir ve veriler, belirli bir kolona uygulanan hash fonksiyonunun çıktısına göre bu bucket ‘lardan birine atanır. Peki, bu bizim için neden önemli? Doğru belirlenmiş bir bucket_count değeri, verilerin eşit dağılımı sağlar bu da sorgu performansını iyileştirir. Bucket sayısı, paralel çalışan işlemlerin sayısını doğrudan etkiler, örneğin bir tablo 16 bucket sahipse, aynı anda 16 thread veriyi işleyebilir. Aynı bucket sayısıyla bölünmüş tablolar arasında yapılan join işlemleri daha verimli olur. CREATE TABLE UserActiviy ( Id_user INT, activity_type STRING ) CLUSTERED BY […]
Bu makalede 2014 yılında yayınlanan In-Memory Table OLTP(Online Transaction Processing) Engine yapısından bahsedeceğim. In-Memory Table, adından da anlaşılacağı üzere, verileri fiziksel disk yerine RAM üzerinde saklandığı özel bir tablo türüdür. Bu yapı, geleneksel disk tabanlı tablolara kıyasla çok daha hızlı veri okuma ve yazma performansı sunar çünkü disk erişimi esnasında yaşanan darboğaz sorununa alternatif bir çözüm sunmuştur. Verinin, buffer pool içinde cache’lenmesi, düşük gecikme(low latency) ve yüksek throughput en büyük avantajlarıdır. Özellikle yüksek hacimli veri işleyen, çok sayıda eş zamanlı işlem gerçekleştiren veya gerçek zamanlı yanıt süresi gerektiren sistemlerin kullanımı oldukça yaygındır. (Örneğin: finansal platformlar, IoT işlemleri, sipariş işlemleri) Avantajlarını göz önünde bulundurarak o zaman her ortama bunu yapalım diyebiliriz 🙂 pahalı bir donanım olan RAM ‘den sınırsız bir şekilde elinizde bulunduruyor olmanız gerekebilir çünkü In-Memory bulunduğu ortama yüksek RAM maliyeti, kendine has filegroup yapısı ile yönetimsel zorluklar, failover sürelerinin uzaması gibi dezavantajları da beraberinde getirmektedir. In-Memory Tabloların kendine özgü […]
Bu makalede SQL Server 2017 versiyonuyla gelen DMV ‘ler ile kullanımı kolaylaşan bir özellik olan Smart Backup dan bahsedeceğim. Bu makaleye başlamadan şunu belirtmekte fayda var; bu özelliği üçüncü parti yazılımlar veya eklentiler ile yapabilmek mümkün MSSQL haricinde diğer ilişkisel veri tabanı sistemlerinde de buna benzer özellikler tanımlanabilir, kullanılabilir. Bu makalemizin anlaşılabilirliğini artırmak adına öncelikle performans ve veri bütünlüğü açısından hayati öneme sahip olan Checkpoint kavramından bahsetmek istiyorum; SQL Server, veri değişikliklerini önce RAM’de (buffer cache) tutar, bu sırada log dosyasına (LDF) işlemi yazar. Checkpoint olduğunda, bu değişmiş (dirty) geçici verileri .LDF dosyasından kalıcı hale getirir .MDF dosyasına (diske) yazar. Checkpoint, varsayılan olarak her 60 saniyede bir çalışır ancak SQL Server 2012 ile indirect checkpoints tanıtıldı ve veri tabanı bazlı olarak ayarlanabilir. Şimdi iki Checkpoint yönetimine daha yakından bakarak artı ve eksilerinden bahsedelim; Otomatik checkpoint modunda, tüm buffer pool’daki sayfalar taranır ve değişmiş sayfalar bulunur bu ilk baktığımızda bizim için […]
Bu makalede SQL Server2014 ile gelen bir özellik olan ilişkisel veri tabanlarının ortak bir özelliği olan Delayed Durability den bahsedeceğim. Bu özellik hakkında detaylı bir şekilde konuşmaya başlamadan önce tekrar etmemiz gereken bir özellik var o da bir verinin yazılmasının aşamaları. Veri öncelikle log file olan .ldf dosyasına yazılmadan (log flush), data file olan .mdf veya .ndf dosyalarına yazılma işlemi (page flushing) gerçekleşmez. Veri tabanına verinin yazılması sürecinde işlem commit edilerek bunun bilgisi kullanıcıya dönüş sağlanır ancak aksi bir durumda crash veya buna benzer durumlarda sql server veriyi log dosyasından recover edebileceği için verinin kaybolmamasının garantisini sağlamış olur. Bu aşamada makalemizin konusu olan Delayed Durability bize esneklik sağlayabilir. Kısaca açıklayacak olursak bu özellik sayesinde veri tabanına verinin yazılması sürecinde işlem commit edilmeden kullanıcıya sürecin tamamlandığı bilgisi veriliyor bu güzellik bir özellik gibi görünse de aslında bir dezavantaj aslında işlem tamamlanmış olmuyor bu özelliği kullanırken crash veya buna benzer durumlarda sql […]
Bu makalede Windows işletim sistemine sahip bir sunucumuza PostgreSQL kurulumundan bahsedeceğim. Açık kaynak kodlu ve ücretsiz bir veri tabanı yönetim sistemi olan PostgreSQL Windows, Linux, macOS gibi bir çok farklı işletim sisteminde çalışabilir. Backup işlemlerini pg_dump, restore işlemlerini pg_restore ile gerçekleştirebilirsiniz. İlk olarak yapmamız gereken PostgreSQL ‘in https://www.postgresql.org/dowload web sitesinden indirme işlemini gerçekleştiriyoruz. Görsel – 1 Kurulum dosyasını çalıştırıyoruz. Görsel – 2 PostgreSQL yükleyecek olduğumuz dizini seçiyoruz. Görsel – 3 PostgreSQL ile birlikte kurulumu gerçekleştirilecek bileşenleri seçiyoruz. Görsel – 4 Veri tabanı Varsayılan SuperUser kullanıcısı olan “postgres” için parola belirliyoruz. Görsel – 5 Port belirleme adımın sizin konfigürasyonunuza göre değiştirebilirsiniz ancak varsayılan port “5432” olduğu için ben bu şekilde devam ediyorum. Görsel – 7 Devamında öncelikle bölge sonrasında kurulum öncesi son kontroller sağlayarak kurulumu başlatıyoruz ve tamamlıyoruz. Görsel – 7 Görsel – 8 Görsel – 9 Görsel – 10 Evet PostgreSQL servis kurulumlarımız tamamlandı. Şimdi de pgAdminin kurulumunu yapmamız gerekiyor […]
Bu makalede SQL Server Integration Services kurulu olan bir ortamdan servisi kaldırma adımlarından ve bunun mevcuttaki ortama olan etkilerinden bahsedeceğim. Bizler genel olarak kurulum ve bu kurulumların adımları ilgileniriz ancak bugün bunun tam tersi mevcutta SQL Server 2019 kurulu olan bir servisi kaldıracağız. Denetim masası (Control Panel) > Programs > Programs and Features Adımları ile mevcut ortamda kurulu olan uygulamaları görüntüledikten sonra “Microsoft SQL Server 2019” tıklayarak “Uninstall/Changes” tıklıyoruz. Görsel – 1 Karşımıza SQL Server ne yapmak istediğimizi soruyor biz bir servis kaldıracağımız için “Remove” diyerek ilerliyoruz. Görsel – 2 Yapmak istediğimiz işlemi hangi Instance üzerinde yapacağımızı soruyor, ben “TEST” Instance da yapacağım seçerek ilerliyorum. Görsel – 3 Şimdide Bu Instance üzerinde neyi kaldırabileceğimi bana gösteriyor, ben Integration Services kaldıracağım için Shared Features menüsü altında bulunan Integration Services seçiyorum burada unutulmaması gereken bir şey var eğer Shared Features altında bulunan bir service kaldırır veya kurarsanız bundan sadece seçili olan Instance […]
Bu makalede Visual Studio ile hazırlayacağınız SSIS packages kullanılan araçlardan ve birkaç farklı bakış açısından bahsedeceğim. Birçok işte olduğu SSIS package hazırlarken de kendi kurum ve kurumlarımızın ihtiyaç ve planlarına yönelik olarak yapabileceklerimizi kendimize göre ayarlayabiliriz. Görsel – 1 Bir Execute SQL Task ile yapabileceklerimizden birkaç tanesine birlikte bakalım. Görsel – 2 SQLSourceType kısmında kullanabileceğimiz 3 farklı seçenek bulunmaktadır, Direct input: SQL sorgusunu doğrudan SQLStatement kısmına yazabilmemizi sağlar. File connection: Kaydetmiş olduğunuz bir SQL komut dosyasınızı FileConnection ‘dan direk sorgularınızın çalıştırılmasını sağlar. Variable: Variables olarak belirlemiş olduğunuz ve bu menüden kontrolünü sağlayarak görüntüleyebileceğiniz bir değişkeninizden SourceVariable kısmında belirterek çalıştırılmasını sağlar. Belirlemiş olduğunuz SQLSourceType ile SQL Task Execute olduğunda direk bir sonraki adıma geçebilir veya buradaki çıktınızı “Result Set” kısmında bir değişkene de atıyabilirsiniz. SSIS Toolbox içerisinde bulunan Containers sekmesinden farklı Container çeşitleri bulunmaktadır bunlardan biri olan For Loop Container ‘a göz atalım. Görsel –3 Görsel – 4 Görsel – […]
Bu makalede Visual Studio ‘da SSIS Connection Manager ile sunucular arasında bağlantı sağlama adımlarından bahsedeceğim. SQL Server Integration Services (SSIS) süreçlerini yönetmek ve geliştirmek için birçok seçenek var bunlardan bazılarını örnek vermek gerekirse; Visual Studio, Azure Data Factory (ADF), Third-Party (KingswaySoft, COZYROC SSIS) bunların yanında tabi SQL Server üzerinde de bu işlemlerimizi yapabiliriz. Ben bunlardan en yaygın olarak kullanılan Visual Studio üzerinden yaptığım çalışmalar kapsamında örnekler vermeye çalışacağım. Visual Studio üzerinden bir SSIS packages oluşturarak farklı sunucularda bulunan verileri taşıma işlemlerini yaptırmak istiyorum. Bunun için öncelikle sunucularda ilgili yetkilendirilmesi yapılmış bir kullanıcınızı olduğunu varsayarak ilerleyeceğim ama buradaki senaryolardan konuşmak istiyorum biraz örneğin; Kullanıcı Senaryosu 1: 142.142.0.42 sunucudaki A veri tabanında okuma yetkisine sahip “kullanici1”, 242.242.0.42 sunucusundaki B veri tabanında yazma yetkisine sahip “kullanici2” kullanıcılarına sahipsiniz Kullanıcı Senaryosu 2: 142.142.0.42 sunucudaki A veri tabanında okuma yetkisine, 242.242.0.42 sunucusundaki B veri tabanında yazma yetkisine sahip “kullanici3” kullanıcısına sahipsiniz Bu iki senaryoda da […]
Bu makalede SQL Server Integration Service Feature kurulum adımlarından bahsedeceğim. NOT – 1: SQL Server Integration Service Feature kurulum aşamasında ve sonrasında sunucu restart veya SQL Server service restart gerekmemektedir. NOT – 2: Mevcutta WFCI kurulmuş olan bir ortamınıza sonradan SQL Server Integration Service Feature eklemenize desek vermemektedir, ancak WFCI SQL Services ilk kurulumunda “Feature Selection” sekmesinden Integration Service seçmeniz durumunda kurulumunu yapabilirsiniz. SQL Server kurulum aşamasında eğer Integration Service kurulumunu yapmadıysanız, Integration Services Catalog gelerek sağ tıkladığımızda Create Catalog seçeneğini tıkladığımızda kurulumunu yapmak istediğimizde aşağıdaki görsellerdeki şekilde hatalar alacaksınız. Görsel – 1 Görsel – 2 Görsel – 3 Yukarıda Görsel – 3 ‘te Sql Server Configuration Manager ‘dan kontrol sağladığımızda SQL Server Integration Services olmadığını görüyoruz. Örnek görsellerde görüldüğü üzere SQL Server ‘da ilgili features olmadığı ile ilgili hatayı alıyoruz bu hatayı gidermek için features ekleyeceğiz. Görsel –4 Görsel –5 Görsel – 6 ‘da görüldüğü […]
Bu makalede Sql Server ’da diskine ulaşılamayan bir veri tabanının files taşıma adımlarından bahsedeceğim. Diyelim ki database files konumlandırmış olduğumuz disklerden bir tanesi offline durumuna geçtiğini gördünüz ve diskin durumu hakkında net bilgi edinememektesiniz. Diskin içerisinde bulunan verileri kurtarmak istiyorsunuz ama disk offline durumda olduğundan dolayı içine erişim sağlayamıyorsunuz bu gibi durumda benim kullanmış olduğum bir yöntemi sizinle paylaşmak istiyorum, Robocopy. Şimdi bir örnek üzerinden adım adım neler yapabileceğimize bakalım. Öncelikle database files konumlandırını tespit ediyoruz; SELECT name as FileLogicalName, physical_name as FileLocation FROM sys.master_files WHERE database_id =DB_ID(N’MuratTest’) Görsel – 1 Database files konumlandırını tespit ettikten sonra offline durumuna getirerek ilgili files konumlarını değiştireceğiz. 1) Öncelikle database offline state çekiyoruz. use master GO ALTER DATABASE [MuratTest] SET OFFLINE WITH ROLLBACK IMMEDIATE 2) Database file taşıma işlemlerini gerçekleştiriyoruz, Command Prompt Rus aas administrator ile çalıştırılır; robocopy D:\Data3\Data D:\Data4\Data /mir /mt:60 /r:2 /w:5 /np /ts /bytes /xd >>D:\Data3\log1.txt Görsel – 2 […]