Daha İyi Performans için SQL Sorgularının Profili Nasıl Oluşturulur
Yayınlanan: 2023-03-16Servebolt'taperformansı yaşıyor ve nefes alıyoruz .
Veritabanı performansı bir istisna değildir.
Bir bağlantıya tıklayan bir web sitesi ziyaretçisinin ardından verimsiz bir sorgu yürütmek, kullanıcı deneyimini önemli ölçüde bozacaktır .Sayfa işleme gibi başka bir eylem gerçekleşmeden önce, birkaç saniye sürebilen yavaş sorgunun tüm süresinin yürütülmesini beklemeleri gerekecektir. Bu bekleme süresi, yalnızca sorgunun çalışması için gereken süreyi değil aynı zamanda ön işleme ve son işleme için gereken ek süreyi de içerir. Sonuç olarak, kötü tasarlanmış bir sorgu, bir web sitesinin genel performansını önemli ölçüde yavaşlatarak sinir bozucu bir kullanıcı deneyimine neden olabilir.
İlk Bayt Süresi (TTFB), bir kullanıcı bir web sitesine istekte bulunduktan sonra verilerin ilk baytının alınmasının ne kadar sürdüğünü ölçmenin bir yoludur.Ayrıca arama motorları tarafından siteleri değerlendirirken kullanılan önemli bir ölçüttür. Yavaş bir sorgu tetiklendiğinde TTFB'yi olumsuz etkiler. Yavaş sorgunun çalışması ne kadar uzun sürerse, TTFB o kadar yüksek olur, bu da genel web sitesi performansının yavaşlamasına ve daha az tatmin edici bir kullanıcı deneyimine neden olur.
Bu kılavuzda, veritabanı yanıtlarına dayanan web uygulamalarının performansını korumanın çok önemli bir parçası olan SQL sorgularının profilini nasıl çıkaracağınız konusunda size yol göstereceğiz. Bu, daha sonra performanslarını iyileştirmek için bu sorguları optimize etmeye başlayabilmenin temelini oluşturan bir süreçtir.
SQL Sorgu Profilini Anlamak
Bir web uygulaması geliştirdikçe ve daha büyük ölçekte çalışmaya başladığında, bir zamanlar sorunsuz çalışan SQL sorguları performans sorunlarına neden olabilir. Genel olarak konuşursak, saniyede artan istek sayısıyla birlikte artan miktarda veriye karşı çalışan artan sayıda sorgu olma eğilimindedir. Ve performans düştüğünde, kullanıcılarınızın siteniz, yazılımınız veya hizmetinizle etkileşim kurarken yaşadıkları deneyim de düşer.
Sorgu profili oluşturma, veritabanı sorgularını analiz etmenin, performanslarını değerlendirmenin ve olası sorunları belirlemenin bir yoludur.
Bu sorunlu sorguları analiz edip tanımlayarak, veritabanlarının performansında ölçülebilir bir fark yaratabilecek özel iyileştirmeler yapabilirsiniz. Bu da, uygulamalar ve siteler daha duyarlı olacağından, gelecekte daha iyi ölçeklenebilirliğin yanı sıra genel müşteri memnuniyetini de sağlayacaktır.
MariaDB (ve MySQL), bu makalede ele alacağımız sorgu profil oluşturma için çeşitli araçlar ve teknikler sağlar. Yavaş sorgular belirlendikten sonra , bir sonraki adım onları optimize etmekolacaktır . Bu süreç, sorunun temel nedenini belirlemeyi ve verimliliklerini artırmak için sorguların yapısında değişiklikler yapmayı içerir.
SQL Sorgularının Profili Nasıl Oluşturulur (7 Yöntem)
İyileştirme çabalarını nereye odaklayacağınızı bilmeniz için yavaş ve verimsiz sorguları belirlemeye yönelik mevcut farklı araçları ve teknikleri inceleyerek başlayalım:
1 – EXPLAIN EXTENDEDKomutu
SQL sorgularınızı analiz etmek için kullanılabilecek araçlardan biriEXPLAIN komutudur.
EXPLAIN komutunu bir sorgu üzerinde çalıştırarak, sorgunun nasıl yürütüldüğünü, hangi dizinlerin kullanıldığını ve incelenen satır sayısını görebilirsiniz.
EXPLAIN SELECT * FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.name = 'John Smith';
EXPLAINkomutunu bir sorguda çalıştırdığınızda , aşağıdakiler de dahil olmak üzere birkaç sütun içeren bir sonuç kümesi döndürür:
- id: Yürütme planındaki sorgunun benzersiz tanımlayıcısı
- select_type: SIMPLE veya SUBQUERY gibi sorgunun türü
- tablo: Sorgulanan tablo
- type: JOIN veya INDEX gibi kullanılan birleştirme türü
- mümkün_anahtarlar: MariaDB veya MySQL'in sorguyu işlemek için kullanmış olabileceği dizinler
- key: MariaDB veya MySQL'in gerçekte sorguyu işlemek için kullandığı dizin
- key_len: Kullanılan anahtarın uzunluğu
- satırlar: MariaDB veya MySQL'in sorgu için inceleneceğini tahmin ettiği satır sayısı
Ekstra: Bu, tam tablo taramasının yapılıp yapılmadığı veya geçici bir tablonun kullanılıp kullanılmadığı gibi sorgu hakkında ek bilgiler içerir.
EXPLAINkomutunun çıktısını analiz ederek , genel olarak zayıf indeksleme, yetersiz birleştirme türleri veya çok sayıda incelenen satır gibi potansiyel performans darboğazlarını tanımlayabilirsiniz.
Örneğin, tür sütunu "dizin" yerine "TÜMÜ" gösteriyorsa, sorgu tam bir tablo taraması yapıyor demektir ve bu neredeyse kesin olarak yavaş performansla sonuçlanacaktır. Anahtar sütunu NULL ise, MySQL herhangi bir dizin kullanmıyor ve bu da yavaş olacaktır. Satırlar sütununun yüksek bir değere sahip olması, birçok satırın incelendiği ve performansta daha fazla düşüşe neden olduğu anlamına gelir.
Ek bilgi sağlamaya yardımcı olması için EXPLAIN EXTENDED varyasyonunu kullanmayı tercih ediyoruz .
Not: Bu, MySQL'de kullanımdan kaldırılmış olsa da, MariaDB'de hala mevcuttur.
EXTENDED seçeneğini kullanarak incelenen satır sayısı, döndürülen satır sayısı, kullanılan JOIN türü hakkında bilgiler, taranan tabloların sırası, kullanılan indeksler ve ne kadar sürdüğü gibi faydalı bilgileri görebileceksiniz. sorgu yürütüldü.
EXPLAIN EXTENDED komutunu kullanmak şu şekilde görünür:
EXPLAIN EXTENDED SELECT * FROM your_table WHERE column_name = 'value';
Bu örnekte EXPLAIN komutu, veritabanının kullanacağı kaynakların yanı sıra sorguyu yürütmek için atacağı adımların bir listesini gösterecektir.
Bu komutu kullanarak, sorgudaki darboğazları daha kolay tespit edebileceksiniz, gerekli değişiklikleri yapmanıza izin vererek bunu hafifletmeye ve sorgunun performansını hızlandırmaya yardımcı olacaksınız.
Örneğin, EXPLAIN EXTENDED komutunun kullanılması dizin ekleme, JOIN koşullarını optimize etme ve sorgu tarafından döndürülen toplam satır sayısını sınırlama ihtiyacını belirlemeye yardımcı olabilir.
Doğru sonuçlar aldığınızdan emin olmak için bu test ve optimizasyonları gerçekleştirirken sorgu önbelleğini devre dışı bıraktığınızdan da emin olmalısınız. Bunu yapmak için, istemcinizi bağladığınızda önce bu komutu çalıştırın.
SET SESSION query_cache_type=0;
Sorgunuzda bu değişiklikleri yaptıktan sonra, (varsa) ne kadar iyileşme sağlandığını belirlemek için performansını tekrar test edin. Bir sorgunun herhangi bir profil oluşturma ve optimizasyonunda olduğu gibi, sürecin yinelemeli olduğunu unutmayın - EXPLAIN EXTENDED komutunu ve ardından birkaç kez bir performans testi kullanmayı bekleyin.
2 – EXPLAIN ANALYZEKomutu
Bu komut, bir sorgunun yürütme planını analiz etmek ve sorgunun yürütülmesi için geçen gerçek süre ve gerçekten incelediği satır sayısı gibi performans ölçümlerini döndürmek için kullanılır. EXPLAIN ANALYZE komutunun sonuçlarını analiz ederek, dizin eksikliği veya incelenmesi gereken çok sayıda satır gibi sorgunun yürütülmesindeki potansiyel darboğazları belirleyebilirsiniz.
3 – Yavaş Sorgu Günlüğü
Bu, yürütülmesi belirli bir süreden daha uzun süren tüm sorguları günlüğe kaydeden MariaDB'de (ve MySQL'de) yerleşik bir özelliktir. Yavaş sorgu günlüğü, bir saniye gibi belirli bir eşikten daha uzun süren sorguları günlüğe kaydedecek şekilde yapılandırılabilir.
Servebolt'ta yavaş sorgu günlüğü, yürütülmesi 1 saniyeden uzun süren tüm sorguları günlüğe kaydeder. Bunun nedeni, çoğu sorgunun saniyenin kesirlerinde yürütülmesi gerektiğidir. WordPress çalıştıran bir site gibi bir web uygulaması bağlamında, tek bir sayfanın yüklenmesi 10 ile 100 arasında veritabanı sorgusu gerektirir; sayfa HTML'de derlenip kullanıcıya döndürülmeden önce bunların tümü sırayla yürütülmelidir.
Geçerli Servebolt Bulut yapılandırması, yavaş sorgu günlüklerini küresel bir günlük sunucusunda tutar. İhtiyaç duyulursa, destek ekibimizle iletişime geçmeniz yeterlidir; dosyayı ilgili günlükler için filtreleyip size çıktıyı sağlarız.
Kendi ortamlarınızda, MariaDB veya MySQL yapılandırma dosyanıza (my.cnf veya my.ini) aşağıdaki satırları ekleyerek yavaş sorgu günlüğünü etkinleştirebilirsiniz:
log_slow_queries = /path/to/slow.log
long_query_time = 1
4 – Görsel Anlatım Planı
Görsel bir açıklama planı, EXPLAIN komut çıktısının grafiksel bir temsilini sağlayarak bir sorgunun yürütülmesini anlamayı ve herhangi bir performans sorununu algılamayı kolaylaştırır.
Not: Görsel Açıklama Planları, web uygulamaları geliştirme sürecindeyken faydalıdır.
Düz metin çıktısı yerine, sorgu yürütmeyi bir ağaç yapısında görüntüler ; her düğüm bir tabloyu, dizini veya işlemi temsil eder ve aralarındaki bağlantılar işlemlerin sırasını gösterir.
MySQL Workbench ve EXPLAIN Analyzergibi farklı araçlar, görsel açıklama planları oluşturabilir ve yürütme planında gezinmek ve her işlemi ayrıntılı olarak incelemek için etkileşimli bir arayüz sunar.
Örneğin, MySQL Workbench'te görsel bir açıklama planı oluşturmak, sorguyu yürütmek ve sonuç sekmesindeki "Planı Açıkla " düğmesine tıklamak kadar basittir.Bu, her işlemle ilgili ayrıntılı bilgilerle birlikte sorgu yürütme planının grafiksel bir temsilini sunar. Bu, herhangi bir performans sorununu belirlemenizi ve ardından sorguyu gerektiği gibi optimize etmenizi sağlar.
5 – MySQL Ayarlayıcı
MySQL Tuner, bir veritabanı sunucusunun performansını ve yapılandırmasını kontrol eden ve iyileştirme için öneriler sunan bir betiktir. Toplam sorgu sayısı, yavaş sorgu sayısı ve geçerli arabellek havuzu kullanımı gibi bilgiler de dahil olmak üzere geçerli sunucu durumunun bir özetini sağlar.
Veritabanı sürümü, kullanılan depolama motoru ve sorgu önbelleği yapılandırması gibi diğer çeşitli ayarları kontrol etmek için de kullanılabilir ve mevcut iş yüküne dayalı olarak bu ayarları optimize etmek için öneriler sunar.
Diğer araçlardan temel farklarından biri, sunucunun kendisinde veya uzaktan çalıştırılabilen bir komut satırı aracı olması ve veritabanı performansını izleme ve optimize etme sürecini otomatikleştirmeyi kolaylaştırmasıdır.
Not: Web uygulamanız (ve veritabanınız) zaten Servebolt Bulutunda barındırılıyorsa bu, ekibimizin uzmanlaştığı bir şeydir ve bir aracın sağlayabileceği herhangi bir öneriden daha iyisini yapabilir.
6 – Profil Oluşturucuları Sorgula
MariaDB Enterprise Query Analyzer , Dataedo ve Percona Toolkit gibi SQL sorgularının profilini oluşturmak için kullanılabilecek üçüncü taraf sorgu profil oluşturucuları vardır . Üçüncü taraf sorgu profili oluşturucular, MariaDB'de (veya MySQL'de) bulunan yerleşik araçlara kıyasla ek özellikler ve işlevler sağlayabilir.
Not: Sorgu Profil Oluşturucuları, web uygulamaları geliştirme sürecindeyken faydalıdır.
Örneğin, yürütme süreleri ve kilit bekleme süreleri gibi sorgu performansı hakkında daha ayrıntılı bilgiler sunabilir ve yerleşik araçlarla mümkün olmayan şekillerde verilerin görselleştirilmesini sağlayabilirler.
Yerleşik araçlar ihtiyaçlarınız için yeterliyse, üçüncü taraf sorgu profil oluşturucuları kullanmaya gerek yoktur. Ancak, daha ayrıntılı bilgilere veya gelişmiş özelliklere ihtiyacınız varsa, üçüncü taraf bir profil oluşturucuyu dikkate almanız faydalı olabilir.
7 – İzleme Araçları ile Profil Oluşturma
Ayrıca Prometheus, Grafana ve Nagios gibi sorguları profillemek ve veritabanlarınızın performansını izlemek için kullanılabilecek bir dizi izleme aracı da vardır.
Prometheus , metrik verilerini toplayabilen, depolayabilen ve sorgulayabilen, gerçek zamanlı olarak değerli içgörüler elde etmenizi sağlayan verimli bir izleme sistemidir.Toplanan ölçümleri depolamak için MariaDB (ve MySQL) ile entegre olur ve etkili görselleştirme için Grafana ile birlikte gelir.
Grafana , Prometheus'tan toplanan verileri izlemek ve görselleştirmek için kullanılabilen güçlü, açık kaynaklı bir analiz aracıdır.Özel panolar ve uyarılar ayarlamak, veritabanınızın performansını gerçek zamanlı olarak takip etmenizi sağlar.
Nagios, veritabanınızın sağlığını her zaman izlemenize yardımcı olur.CPU, RAM ve disk alanı gibi önemli kaynakları izlemek ve aynı zamanda diğer hizmetleri ve ağ cihazlarını takip etmek için kurulabilir. Yüksek düzeyde yapılandırılabilir olduğundan, proaktif veritabanı sorgusu izleme için sahip olunması gereken harika bir araçtır.
Bu sunucu izleme araçlarının yardımıyla, performans sorunlarını takip edebilir ve hızlı bir şekilde harekete geçerek veritabanı sunucunuzun sorunsuz çalışmasını sağlayabilirsiniz.
Ortak Sorgu Optimizasyon Teknikleri
SQL sorgularının performansını artırmak için kullanılabilecek birkaç yaygın sorgu optimizasyon tekniği vardır:
1 – İndeksleme
Dizinler, özellikle filtre kullanan sorguları (WHERE) hızlandırmanın bir yoludur.Dizinlerin kullanılması, veritabanı motorunuzdaki (MariaDB veya MySQL) veri yapılarının belirli tabloların dışında kalmasına neden olur ve sorgulamaya çalıştığınız verilere işaret eder. Veritabanı sorgularını iyileştirmek için dizinleri kullanmak başlı başına bir makale gerektirdiğinden, bu gönderide çok fazla ayrıntıya girmeyeceğiz – gelecekte ele almayı planladığımız bir konu.
Örneğin, sipariş kimliği, müşteri kimliği ve sipariş tarihi gibi bilgiler de dahil olmak üzere milyonlarca veri satırı içeren "siparişler" adlı büyük bir tablo düşünün. Müşteri kimliği sütununda bir dizin olmadan belirli bir müşteri tarafından verilen tüm siparişleri almak için bir sorgu yürütülürse, MariaDB'nin ilgili verileri bulmak için tüm tabloyu taraması gerekir. Bu, özellikle büyük tablolar için önemli ölçüde zaman ve kaynak gerektirebilir.
Genel olarak, belirli bir sorguyu tekrar tekrar çalıştıracağınızdan ve performans konularını okuyacağınızdan emin olduğunuzda, bir dizin (veya birden fazla) oluşturmak, bu sorguyu hızlandırmak için doğru yaklaşım olabilir.
WordPress bağlamında, bu çok yaygındır. Pek çok eklenti, dizin kullanmadan genel, paylaşılan tablolar kullanan (kolaylık dışında) geliştiriciler tarafından oluşturulmuştur. Sonuç olarak, genellikle çok önemli performans kazanımlarının olduğu bir alandır.
Belirli bir tabloda var olan tüm dizinleri görüntülemek için,
Aşağıdaki wp_postmeta tablosu örneğinde olduğu gibi, SHOW INDEX FROM'ukullanarak belirli bir tabloda var olan tüm dizinleri görüntüleyebilirsiniz :
MariaDB [db_name] > SHOW INDEX FROM wp_postmeta;
Bir senaryoda, yakın zamanda bir wp_postmeta tablosu için iki dizin oluşturduk:sb_postid_metakey ve sb_postid_metakey_metaval.
Bu dizinler, en yavaş sorgulara bakılarak ve hepsinin, çok sayıda (VE/VEYA) karşılaştırma koşuluna ek olarak WHERE kullanılarak filtrelenen SELECT deyimleri olma özelliğiyle nispeten benzer olduğunu bulmaya dayalı olarak eklenmiştir. Bunu gördükten sonra, kullanılan tablo için mevcut dizinleri gözden geçirdim ve yaklaşımımı daha fazla doğrulamak için sorgudaEXPLAIN EXTENDED komutunu çalıştırdım.
Sorgu çoğunlukla çalışıyordu veJOINkullanarak wp_postmeta tablosunu kullanıyordu .Bunun gerçekleşme sırasına bağlı olarak, bu dizinlerin eklenmesi MariaDB'nin (veya MySQL'in) tüm tabloyu tüm satırlarıyla taramak yerine yanıtını dizinlerden almasına izin verirdi.
CREATE INDEX sb_postid_metakey ON wp_postmeta (post_id, meta_key);
CREATE INDEX sb_postid_metakey_metaval ON wp_postmeta (post_id, meta_key, meta_value);
Bu, elinizin altında bulunan araçları (yukarıda özetlendiği gibi) ve ayrıca veritabanının veri türleri ve içerikleri hakkındaki bilgileri kullanarak “işleri çözmenin” bir birleşimidir. Bu hiçbir şekilde her zaman işe yaramaz; olsa bile, her zaman %500 performans artışı sağlamaz. Büyük bir dizine sahip olmak, tüm satırları taramaktan daha yavaş olabilir, bu nedenle, emin olmak için dizinleri uygulamadan önce ve sonra sorguların test edilmesi gerekir.
Not: Dizin hızlarını test etmeye çalışırken, aşağıdakileri kullanarak oturum için sorgu önbelleğe almayı devre dışı bırakmak isteyeceksiniz:
SET SESSION query_cache_type=0;
Bu durumda, dizinler kullanılmadan önce sorgunun yürütülmesi 10.437 saniye sürdü. Ve iki dizini oluşturduktan sonra, aynı sorgu [# saniye] sürdü.
2 – Veri Erişimini Azaltma
Veri erişimini azaltmak , yani bir sorguyu yürütmek için erişilmesi gereken satır ve sütun sayısını en aza indirmek.Bu, sorgu tarafından alınan verileri filtreleyerek, dizinleri kullanarak ve büyük tabloları bölümlere ayırarak elde edilebilir. Çoğu insanın ihtiyaç duyacağı (veya yapabileceği) bir şey olmasa da, veritabanı sorgularını sıfırdan tasarlarken akılda tutulması gereken önemli bir noktadır.
Örneğin, bir veritabanı sorgusu oturum açma amacıyla bir kullanıcı hakkında veri arıyorsa, sorgu LIMIT 1 olmalıdır, çünkü hiçbir zaman birden fazla kullanıcının verisi gerekmemelidir.
Not: Bu, optimizasyondan çok veritabanı tasarımıyla ilgilidir.Performansı sürdürmek önemli olsa da, bu çaba eklenti geliştiricileri için (WordPress bağlamında) son kullanıcıların çoğundan daha önemlidir.
Veri erişiminde herhangi bir değişiklik yaptıktan sonra hızları test etmeden önce, aşağıdaki komutu çalıştırarak sorgu önbelleğe almayı devre dışı bıraktığınızdan emin olmanız gerektiğini unutmayın:
SET SESSION query_cache_type=0;
3 – Veri Bölümlemeyi Kullanma
Verileri daha küçük parçalara bölerek, veritabanları daha verimli hale gelir ve yönetilmesi daha az zaman alır. Bu strateji, yedeklemeler ve güncellemeler gibi bakım süreçlerine harcanan süreyi azaltmanın yanı sıra yönetilmesi gereken veri miktarını sınırlamaya yardımcı olabilir. Genel olarak, performansı artırmaya ve kaynak kullanımını optimize etmeye yardımcı olur.
Bir veritabanındaki verileri bölümlemek için şu adımları izleyebilirsiniz:
- Bölümlendirilecek bir tablo seçerken, büyük miktarda veri içeren ve bölünmeden fayda sağlayacak bir tablo seçtiğinizden emin olun. Bu, sisteminizi optimize etmenize ve sorgu performansını artırmanıza yardımcı olacaktır.
- Veritabanınız için doğru bölümleme yöntemini seçmek çok önemlidir. Verilerinizin yapısına ve yürütmeyi planladığınız sorgulara bağlı olarak aralık, liste, karma veya anahtar bölümleme arasından seçim yapabilirsiniz. Optimize edilmiş performans ve sonuçlar için ihtiyaçlarınıza en uygun olanı seçtiğinizden emin olun.
- Aralık bölümleme, belirli aralıklara bölünebilen verileriniz olduğunda ideal seçimdir.Örneğin, birden çok yıla ait verileri içeren bir tablonuz varsa, tabloyu daha iyi düzenlemek için bir aralık bölümü oluşturabilirsiniz. Söz konusu sütunun tarihine veya sayısal değerine bağlı olabilir.
- Liste bölümleme, belirli bir parametreye göre çeşitli gruplara kolayca ayrılabilen verileri işlemek için etkili bir tekniktir.Örneğin, Departmana göre kategorize edilmiş çalışanların bilgilerini içeren bir tablonuz var; bu, liste bölümlemenin kullanılmasını gerektirir.
- Karma bölümleme, belirli bir sütunun karma değerine dayalı olarak verileri eşit boyutlu kümeler halinde düzenlemek için etkili bir stratejidir.Bu, verilerin birden çok bölüm arasında eşit bir şekilde dağıtılmasına izin vererek, verileri verimli bir şekilde dağıtmak için mükemmel bir seçim haline getirir.
- Anahtar bölümleme, karma bölümlemeye benzer, ancak en büyük fark, verileri farklı gruplara bölmek için temel olarak belirli bir sütun değeri kullanmasıdır.Bu, benzersiz bir tanımlayıcıya veya doğal anahtara dayalı olarak ayrı gruplara ayrılabilen veri kümeleri için ideal bir seçimdir.
- Bölümlere ayrılmış bir tablo oluşturarak, orijinal tabloyu etkili bir şekilde daha küçük tablolara bölebilirsiniz. Bu, CREATE TABLE ifadesine bölümleme için istenen yöntemi ve koşulları belirttiğiniz bir bölümleme yan tümcesi ekleyerek elde edilir. Bunu yapmak, sorgu performansını iyileştirmeye yardımcı olabilir ve ayrıca veri yönetimini daha verimli hale getirebilir.
- INSERT INTO… SELECT deyimini kullanarak verileri orijinal tablodan yeni bölümlenmiş tabloya hızlı bir şekilde kopyalayabilirsiniz. Bu, bölümlenmiş tablonuzu tüm ilgili bilgilerle kolayca dolduracaktır.
- Bölümlenmiş tablodan yararlanmak için uygulamaların şimdi yeniden yapılandırılması gerekir. Bu, orijinal tablonun yerini alacak ve uygulamalarınızı daha verimli hale getirecektir.
- Potansiyel performans iyileştirmesini değerlendirmek için herhangi bir test çalıştırmadan önce, şu komutu çalıştırarak sorgu önbelleğe almayı devre dışı bırakmak çok önemlidir:
SET SESSION query_cache_type=0;
- Bölümlenmiş tablonuzun sorunsuz çalışmasını sağlamak için performansını yakından takip etmeniz önemlidir. Herhangi bir sorun fark ederseniz, bölümleme koşullarını ayarlamak veya başka bir yönteme geçmek yardımcı olabilir. Bölümlerinizi düzenli olarak izlemek, potansiyellerini en üst düzeye çıkarmanıza yardımcı olacaktır.
Komut Dosyası Yükseltmeleri ve Bölümlenmiş Tablolar Hakkında Önemli Not
Veritabanlarını bölümlere ayırmak verimlilikte olumlu bir fark yaratabilirken, veritabanı şemasını değiştirmek için yükseltme komut dosyalarını çalıştırmanın neden olduğu olası sorunları akılda tutmak önemlidir. Bu yükseltmeleri komut dosyası oluştururken bölümlenmiş tabloların dikkate alınması önemlidir. Bölümlenmiş tablolar, yükseltme betiklerinde dikkate alınmazsa, neredeyse kesin olarak hatalı bir siteyle sonuçlanacak olası sorunlar olabilir.
Örneğin, bölümlenmiş bir tabloya yeni bir sütun eklemek için bir komut dosyası oluşturulursa, yalnızca bir bölümü değiştirerek verilerde tutarsızlıklar ve sorunlar yaratabilir. Aynı şekilde, bölümlenmiş bir tabloya dizin eklemek için bir yükseltme komut dosyası oluşturulursa, yalnızca tek bir bölümde dizin oluşturabilir, bu da daha yavaş performansa ve tutarsız sonuçlara neden olur.
Bu tür sorunları önlemek için, yükseltme komut dosyaları bölümlenmiş tabloları dikkate alacak şekilde tasarlanmalıdır. Bu, betiğin her bölüm üzerinde ayrı ayrı çalıştırılmasını veya betiklerin bölümlenmiş tablolarla çalışacak şekilde gözden geçirilmesini içerebilir. Yükseltme işleminin beklenmeyen sorunlara veya veri kaybına yol açmamasını sağlamak için kapsamlı testler yapmak da önemlidir.
4 – Redis
Redis , Servebolt müşterileri için sorgu optimizasyonuna yardımcı olabilecek (ücretli) bir eklentidir.
Redis (bazen Uzak Sözlük Sunucusu olarak da bilinir), verileri bellekte depolayan ve önbelleğe alma, veritabanı ve hatta ileti aracısı olarak kullanılabilen açık kaynaklı bir çözümdür. Uygulama ve veritabanı arasında verimli bir aracı görevi görerek performansı artırmak için bir veritabanıyla entegre edilebilir.
Veritabanı üzerindeki yükü azaltarak uygulamaların performansını ve yanıt sürelerini iyileştirmek için çalışır. Bu, her istek için sık kullanılan verileri veritabanı yerine Redis'te depolayarak yapılır ve bu sayede önemli ölçüde zaman tasarrufu sağlanır.
Eklentiyi düzgün bir şekilde yapılandırarak Redis, sorgu yürütmeyi optimize etmek için bir veritabanıyla birlikte kullanılabilir. Redis'te gerekli veriler bulunmadığında, uygulama onu veritabanından alır ve ileride kullanmak üzere Redis'te depolar. Bu, veri alımını çok daha hızlı ve daha verimli hale getirir.
Bu yaklaşımı kullanarak, uygulama Redis'in hızlı bellek içi erişiminden yararlanabilir ve ayrıca gerektiğinde veritabanındaki verileri depolayabilir ve bunlara erişebilir.
Redis'i ilk kez uyguluyorsanız, herhangi bir performans testi çalıştırmadan önce sorgu önbelleğe almayı devre dışı bırakmanız gerekeceğini unutmayın. Bunu yapmak için şu komutu kullanın:
SET SESSION query_cache_type=0;
Çözüm
MariaDB ve MySQL ekosistemi, veritabanı sorgu yürütmelerindeki darboğazları keşfetmeyi kolaylaştıran ve web uygulamalarınızın performansını iyileştirmenize olanak tanıyan çok çeşitli araçlara ve yöntemlere sahiptir.
Yavaşlamalar, herhangi bir uygulamayı çalıştırma ömrü boyunca meydana gelebilir. Onlardan kaçınmaya çalışmak harikadır, ancak nihayetinde performans sorunlarını teşhis etmeye başladığınızda nereye bakacağınızı bilmeniz gerekir. Çalıştırdığınız veritabanlarının boyutuna ve yapısına bağlı olarak bu, veritabanlarınızın performansını yüksek bir standartta tutmak için sürekli izleme, sorun giderme ve sürekli iyileştirme gerektiren yinelemeli bir süreçtir.