Ubuntu 24.04 Sunucuda En Son MariaDB Sürümünün Kurulumu ve Performans İpuçları

MariaDB, popüler bir açık kaynaklı ilişkisel veritabanı yönetim sistemi olup MySQL’in bir çatalı (fork’u) olarak geliştirilmiştir. Ubuntu 24.04 üzerinde MariaDB’nin en son sürümünün kurulumu ve yapılandırılması, özellikle yüksek trafikli ve veri analizi gerektiren ortamlarda en iyi performansı almak için kritiktir. Bu yazıda, adım adım MariaDB kurulumu, veritabanı ve kullanıcı oluşturma/yönetme işlemleri ve okuma/yazma hızını ile bellek kullanımını optimize etmek için önemli MariaDB ayarları ayrıntılı bir şekilde ele alınmaktadır.

MariaDB’nin Ubuntu 24.04’e Kurulumu (Adım Adım)

Ubuntu 24.04 depolarında MariaDB mevcut olsa da, en son sürümü (MariaDB 11 serisi) kurmak için MariaDB’nin resmi APT deposunu eklemek gereklidir. Ubuntu 24.04’ün varsayılan deposu şu an MariaDB 10.11 sürümünü sunmaktadır . Bu yüzden, MariaDB 11.x kurabilmek için MariaDB’nin kendi paket deposunu sisteme tanıtmalısınız . Aşağıdaki adımları sırasıyla izleyerek kurulumu gerçekleştirebilirsiniz:


1. Sunucu Paketlerini Güncelleyin: Kuruluma başlamadan önce paket listelerini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bunun için terminalde şu komutları çalıştırın:

sudo apt update && sudo apt upgrade -y

Bu adım, sisteminizi en son yazılım güncellemeleriyle uyumlu hale getirir ve olası bağımlılık problemlerini önler.

2. Gerekli Araçları Kurun: MariaDB resmi deposunu eklemek için bazı yardımcı paketlere ihtiyacımız olacak. software-properties-common, curl, gnupg (ya da dirmngr), ca-certificates gibi paketleri kurun:

sudo apt install software-properties-common gnupg ca-certificates curl -y

Bu paketler, yeni depo anahtarlarını ve HTTPS üzerinden repo eklemeyi kolaylaştırır.

3. MariaDB Resmi APT Deposunu Ekleyin: MariaDB’nin en yeni sürümünü kurabilmek için mariadb.org’un sağladığı resmi depo eklenmelidir. En pratik yol, MariaDB’nin depo kurulum betiğini kullanmaktır. Aşağıdaki komutu çalıştırarak Ubuntu 24.04 için MariaDB 11.x deposunu otomatik olarak ekleyebilirsiniz (betik, dağıtımınızı algılar ve uygun sürümü seçer):

curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash

Not: Bu betik, gerekirse –mariadb-server-version=”mariadb-11.4″ gibi parametrelerle belirli bir sürümü hedeflemenize de olanak tanır. Örneğin, MariaDB 11.4 LTS deposunu özellikle eklemek isterseniz betiği –mariadb-server-version parametresiyle çalıştırabilirsiniz. MariaDB resmi deposu eklendiğinde, Ubuntu 24.04 dahil çeşitli sürümler için 10.5, 10.6, 10.11 ve 11.4 gibi en güncel MariaDB paketleri kullanıma hazır olacaktır . Depo eklendikten sonra paket listelerini tekrar güncelleyin:

sudo apt update

4. MariaDB Sunucusunu Kurun: Artık resmi MariaDB paketlerini kullanarak MariaDB sunucusunu ve istemci araçlarını yükleyebiliriz. Aşağıdaki komut, MariaDB sunucu ve istemci paketlerini sisteminize kuracaktır:

sudo apt install mariadb-server mariadb-client -y

Bu işlem, veritabanı sunucu hizmetini (mariadbd) ve sunucuya bağlanmak için gerekli istemci araçlarını (örneğin mariadb komutu) yükleyecektir . Kurulum tamamlandığında servis otomatik olarak başlatılır ve sistem açılışında çalışmak üzere etkinleştirilir .

5. Kurulumu Doğrulayın (Servis Durumu ve Sürüm Kontrolü): Kurulum sonrası MariaDB servisinin düzgün çalıştığını ve doğru sürümün yüklendiğini kontrol etmek önemlidir. Aşağıdaki komut ile MariaDB servisinin durumunu görüntüleyin:

systemctl status mariadb

Çıktıda hizmetin “active (running)” durumda olduğunu görmelisiniz. Ayrıca yüklü MariaDB sürümünü kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

mariadb --version

Bu komut, MariaDB istemci ve sunucu sürümünü gösterecektir. Örneğin, başarılı bir kurulum sonrası versiyon çıktısı “MariaDB Ver 15.1 Distrib 11.x.y-MariaDB” benzeri bir ibare içermelidir. Böylece MariaDB’nin en son sürümünün kurulup çalıştığını doğrulayabilirsiniz.

MariaDB’nin Güvenli Hale Getirilmesi (mysql_secure_installation)

Yeni kurulan MariaDB sunucusunun varsayılan ayarları güvenlik açısından zayıf olabilir. Örneğin, root hesabının parolası olmaması, anonim kullanıcı hesaplarının varlığı ve test veritabanının açık olması gibi durumlar istenmeyen riskler oluşturur. MariaDB, tıpkı MySQL gibi, kurulum sonrasında çalıştırılabilecek bir güvenlik betiği ile bu açıkları kapatmayı sağlar. Bu betiği çalıştırmak bir endüstri standardıdır ve veritabanınızı yetkisiz erişimlere karşı korumak için kritik öneme sahiptir .

MariaDB’yi güvenli hale getirmek için mysql_secure_installation komutunu çalıştırın:

sudo mysql_secure_installation

Bu komut, etkileşimli olarak sizden birkaç güvenlik yapılandırması yapmanızı isteyecektir :

  • Root Parolasını Belirleme: İlk adımda MariaDB’nin root kullanıcısı için güçlü bir şifre oluşturmanız istenir. Bu, veritabanına yetkisiz erişimi engellemek için çok önemlidir . Eğer Ubuntu üzerinde root kullanıcısı unix_socket (sisteme giriş yapan kullanıcıya dayanarak parola sormayan) eklentisiyle tanımlıysa, bu adımda isterseniz unix_socket kullanımını devre dışı bırakıp geleneksel parola ile kimlik doğrulamaya geçebilirsiniz. Güncel MariaDB sürümlerinde, güvenlik nedeniyle root kullanıcı oturumu genellikle sadece yerelden ve socket üzerinden erişilecek şekilde ayarlanmıştır.
  • Uzak Root Erişimini Kapatma: Betik, root kullanıcısının uzaktan (localhost dışında) bağlanıp bağlanamayacağını sormaktadır. Güvenlik nedeniyle root erişimini yalnızca yerel ile sınırlandırmak önerilir (uzak root erişimini devre dışı bırakmak) .
  • Anonim Kullanıcıları Kaldırma: Varsayılan MariaDB kurulumu, şifresiz erişilebilen anonim bir kullanıcı içerebilir. Bu kullanıcıyı kaldırmanız istenir, ki bu da yetkisiz erişim imkanını azaltmak için gereklidir .
  • Test Veritabanını Silme: MariaDB, herkesin erişimine açık bir test veritabanı ile gelir. Betik, bu veritabanını silmenizi ve ona ait ayrıcalıkları kaldırmanızı isteyecektir. Test veritabanının kaldırılması, potansiyel saldırı yüzeyini daraltacaktır .


Bu adımların her birini “Y” (Yes) diyerek onayladığınızda, betik ilgili değişiklikleri uygular ve sonunda “All done! … your MariaDB installation should now be secure.” mesajıyla tamamlanır . mysql_secure_installation betiğinin tüm bölümlerini tamamlamak, üretim ortamındaki tüm MariaDB sunucuları için şiddetle tavsiye edilir . Bu şekilde, MariaDB kurulumunuzu temel güvenlik ilkelerine uygun hale getirmiş olursunuz.

MariaDB’de Veritabanı ve Kullanıcı Oluşturma

MariaDB kurulumu ve temel güvenlik ayarları yapıldıktan sonra, verilerinizi depolayacağınız veritabanlarını oluşturabilir ve uygulamalarınızın bağlanması için gerekli veritabanı kullanıcı hesaplarını tanımlayabilirsiniz. Bu bölümde, yeni bir veritabanı oluşturma, bir kullanıcı tanımlama ve bu kullanıcıya ilgili veritabanı üzerinde yetki verme adımlarını ele alıyoruz. Bu işlemleri yapabilmek için MariaDB sunucusuna root (veya yeterli yetkiye sahip bir kullanıcı) ile bağlanmalısınız. Örneğin, komut satırından MariaDB’ye bağlanmak için aşağıdaki komutu kullanın:

sudo mariadb -u root -p

Yukarıdaki komut, MariaDB istemcisini açarak root kullanıcısıyla bağlanır (Ubuntu’da root için unix_socket etkin ise -p parolasız da giriş yapabilir). Ardından aşağıdaki adımları MariaDB komut satırında (genellikle MariaDB [(none)]> şeklinde bir istemde) gerçekleştirebilirsiniz:

• Veritabanı Oluşturma: Yeni bir veritabanı oluşturmak için CREATE DATABASE komutunu kullanın. Örneğin, ornekdb adında bir veritabanı oluşturmak için:

CREATE DATABASE ornekdb;

Bu komut ile boş bir veritabanı oluşturulur. Veritabanı isimlerinin benzersiz olması gerektiğini unutmayın. Oluşturulan veritabanlarını listelemek isterseniz SHOW DATABASES; komutunu kullanabilirsiniz.

• Kullanıcı Oluşturma: MariaDB’de yeni bir kullanıcı tanımlamak için CREATE USER komutunu kullanırız. Her kullanıcı için bir kullanıcı adı ve host (erişim yapacağı makine) belirtmek gerekir. Örneğin, dbkullanici adında ve sadece yerel makineden (localhost) erişebilen bir kullanıcı oluşturup ona bir şifre atamak için:

CREATE USER 'dbkullanici'@'localhost' IDENTIFIED BY 'GüçlüParola123';

Bu komut, belirtilen kullanıcı adını ve şifreyi MariaDB kullanıcılar listesine ekler. (IDENTIFIED BY ‘parola’ kısmı, verilen parolayı hash’leyip kullanıcıya atar.)

• Yetki Verme (Yetkilendirme): Oluşturduğunuz kullanıcıya, belirli bir veritabanı üzerinde işlemler yapabilmesi için uygun yetkileri tanımlamalısınız. MariaDB’de yetki vermek için GRANT komutu kullanılır. Örneğin, dbkullanici kullanıcısına ornekdb veritabanındaki tüm tablo ve işlemler için tam yetki vermek isterseniz:

GRANT ALL PRIVILEGES ON ornekdb.* TO 'dbkullanici'@'localhost';

Bu komut, ornekdb veritabanındaki tüm nesneler üzerinde (ornekdb.* sintaksı tüm tablolar demektir) belirtilen kullanıcıya ALL PRIVILEGES (tüm yetkiler: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, vb.) tanımlar. Sadece belirli yetkiler vermek isterseniz ALL PRIVILEGES yerine örneğin SELECT, INSERT, UPDATE gibi bir liste belirtebilirsiniz.
Yetki verdikten sonra, değişikliklerin etkin olması için FLUSH PRIVILEGES; komutunu çalıştırmanız genelde önerilir, ancak modern MariaDB sürümlerinde CREATE USER ve GRANT komutları sonrasında elle flush etmeye gerek kalmadan anında etkinleşir.

Bu adımlardan sonra exit; komutuyla MariaDB istemcisinden çıkabilirsiniz. Oluşturduğunuz yeni kullanıcıyı test etmek isterseniz, mariadb -u dbkullanici -p -D ornekdb komutuyla bu kullanıcıyla ornekdb veritabanına bağlanmayı deneyebilirsiniz (kullanıcıya yalnızca localhost erişimi verdiğimiz için testin de aynı makinede yapılması gerekir). Ayrıca, bir kullanıcıya verilen yetkileri görmek için MariaDB içinde SHOW GRANTS FOR ‘dbkullanici’@’localhost’; komutunu kullanabilirsiniz. Kullanıcı veya veritabanı silmek gerekirse sırasıyla DROP USER ‘kullanici’@’host’; ve DROP DATABASE veritabani_adi; komutları kullanılabilir. Veritabanı ve kullanıcı yönetimini ihtiyaçlar doğrultusunda bu şekilde gerçekleştirebilirsiniz.

Yüksek Trafik ve Veri Analizi Ortamları İçin MariaDB Performans Ayarları

MariaDB varsayılan kurulumu, temel kullanım için genel amaçlı ayarlarla gelir. Ancak yüksek trafikli web uygulamaları veya büyük ölçekli veri analizi işlemleri söz konusu olduğunda, MariaDB’nin performansını optimize etmek için konfigürasyon dosyasındaki bazı sunucu değişkenlerini (parametrelerini) ayarlamak gerekebilir. Bu ayarlar, okuma/yazma işlemlerinin hızını artırmaya ve bellek gibi kaynakları verimli kullanmaya yöneliktir. MariaDB sunucu ayarları genellikle /etc/mysql/mariadb.conf.d/50-server.cnf veya /etc/mysql/my.cnf altında tanımlıdır (dağıtıma göre dosya yolu değişebilir). Aşağıda, yüksek performans için en önemli ayarlardan bazıları ve önerilen değerler listelenmiştir:

  • InnoDB Bellek Havuzu (innodb_buffer_pool_size): Bu ayar, InnoDB depolama motorunun kullanıldığı tablolar için bellek içinde ayrılan önbellek boyutunu tanımlar. InnoDB, diskten okuma ve yazma sıklığını azaltmak için verileri ve indeksleri bellek havuzunda tutar. Sunucunuz sadece veritabanı için ayrılmışsa ve ağırlıklı olarak InnoDB kullanıyorsanız, sistem belleğinin ~%70-80’ini innodb_buffer_pool_size için ayırmanız tavsiye edilir . Örneğin 16 GB RAM varsa, ~12 GB’ı bu havuza ayrılabilir. Bu sayede sık erişilen veriler bellekten sağlanır ve disk I/O azaltılarak okuma işlemleri hızlanır. Not: Çok büyük bellek havuzlarını parçalamak için innodb_buffer_pool_instances değerini de ayarlayabilirsiniz (MariaDB 10.5+ sürümlerinde genellikle havuz boyutu büyük ise otomatik olarak birden fazla instance yapar). Örneğin, 8 GB ve üzeri bir buffer pool için 8 instance ayarlamak yararlı olabilir.
  • Geçici Tablo Boyutu (tmp_table_size) ve Bellek Tablo Boyutu (max_heap_table_size): Büyük GROUP BY, ORDER BY veya yoğun join içeren sorgular çalıştırıldığında, MariaDB bazı ara sonuçları geçici tablolar olarak depolar. tmp_table_size ayarı, bellek içinde oluşturulabilecek geçici tablo boyutu sınırını belirler. Eğer bir geçici tablo bu sınırı aşarsa, MariaDB tabloyu diske (Aria veya MyISAM tablosu olarak) yazmaya başlar ki bu da işlemleri yavaşlatır. Veri analizi gibi büyük sorgular çalıştırılan ortamlarda, bu değeri varsayılandan daha yüksek bir değere çekmek performansı artırabilir . Benzer şekilde max_heap_table_size, kullanıcı tarafından oluşturulan MEMORY türü tablolar için maksimum boyutu tanımlar ve genellikle tmp_table_size ile aynı değerde tutulması önerilir . Örneğin, varsayılan 16 MB ise bunu 64 MB veya 128 MB gibi değerlere çıkarmak, büyük geçici verilerin bellekten yürütülmesine imkan tanır (sunucuda yeterli RAM olduğu varsayılarak). Değerleri çok yükselttiğinizde bellek kullanımını izlemeyi unutmayın; ayrıca her bir thread bu limitlere kadar geçici bellek kullanabilir, bu yüzden çok sayıda eşzamanlı büyük sorgu bellek tüketimini arttırabilir.
  • InnoDB Günlük Dosyası Boyutu (innodb_log_file_size): InnoDB’nin redo log (yeniden yapım günlüğü) dosyalarının boyutudur. Bu günlükler, disk yazma operasyonlarında verimlilik ve veri bütünlüğü için kritik rol oynar. Daha büyük log dosyaları, yoğun yazma işlemlerinde InnoDB’nin disk erişimini azaltarak performansı artırabilir. Özellikle büyük toplu yazma işlemleri (bulk insert veya büyük transaction’lar) yapılıyorsa, her transaction’ı diske yazmadan önce daha fazla veriyi log’da tutmak verimli olur. Modern sistemlerde 5GB veya 10GB gibi büyük log dosyası boyutları bile makul olabilir ve büyük transactionların commit öncesi disk IO beklemeden log’a yazılmasına olanak tanır . Ancak log dosyası boyutunu artırdığınızda, beklenmedik bir çökme sonrası recovery (yeniden başlatma) süresinin uzayabileceğini unutmayın; çünkü daha fazla log verisi yeniden uygulanmak zorunda kalınacaktır.
  • İşlem Günlüğü Flush Sıklığı (innodb_flush_log_at_trx_commit): Bu ayar, InnoDB’nin transaction loglarını diske ne sıklıkla yazdığını kontrol eder. Varsayılan değer 1 olup her transaction commit’inde log bilgilerini diske yazar (en yüksek veri güvenliği, en düşük performans). Yüksek yazma trafiği altında ve eğer belirli ölçüde veri kaybı riski tolere edilebiliyorsa, bu değeri 2 yaparak performansı önemli ölçüde artırabilirsiniz . 2 değeri, her commit’te log bilgisini disk üzerindeki dosyaya yazarken, diske fiziksel flush işlemini her 1 saniyede bir yapar; böylece saniyede birden fazla transaction olsa bile disk yazımı her birinde ayrı ayrı değil toplu gerçekleşir. Bu durumda olası bir güç kaybı veya çökmede, son <1 saniyedeki işlemler işletim sistemi tamponunda kalmış olabilir ancak çoğunlukla kurtarılabilir (InnoDB bu modda veriyi dosyaya yazıp işletim sistemi önbelleğinde tutar, fiziksel flush’ı geciktirir). Özetle performans öncelikli senaryolarda innodb_flush_log_at_trx_commit=2 önerilir (disk erişimini azaltarak işlemleri hızlandırır), veri güvenliği öncelikli durumlarda ise 1 değeri kullanılmalıdır . (Not: 0 değeri de benzer performans kazancı sağlar ancak crash durumunda 1 saniyelik veriyi tamamen kaybetme riski vardır, bu nedenle yaygın olarak 2 kullanımı önerilir.)
  • Maksimum Bağlantı Sayısı (max_connections): MariaDB sunucusuna aynı anda bağlanabilecek istemci bağlantılarının üst sınırıdır. Varsayılan genellikle 150 civarındadır. Eğer uygulamanız veya kullanıcı kitleniz çok sayıda eşzamanlı bağlantı yapıyorsa bu değeri yükseltmeniz gerekir. Örneğin, yoğun trafikli bir web uygulaması için max_connections değerini 300–500 aralığında ayarlamak uygun olabilir . Bu sayede sunucu, daha fazla istemciye “Too many connections” hatası vermeden hizmet verebilir. Tabii ki her bağlantı biraz bellek kullandığından ve sistem kaynaklarını paylaştığından, bu değeri donanım kapasitenize göre ayarlayın. Ayrıca, gerçekten çok yüksek bağlantı gereksinimi varsa uygulama düzeyinde bağlantı havuzu (connection pool) kullanımı da değerlendirilebilir.
  • Tablo Açma Önbelleği (table_open_cache) ve İlgili Ayarlar: MariaDB, veritabanı tablolarını açıp kaparken bunları bir önbellekte tutar. table_open_cache ayarı, aynı anda açık tutulabilecek tablo sayısını belirler. Eğer sunucunuzda çok sayıda veritabanı ve tablo varsa veya uygulamanız sık sık tablo açıp kapatıyorsa, bu değeri artırmak performansı iyileştirebilir. Örneğin, 500 adet tablo varsa table_open_cache değerini 1500 gibi bir değere çıkarmak makul olabilir . Bu, tabloların ihtiyaç duyulduğunda yeniden açılma maliyetini azaltır. İlaveten, MariaDB’de table_open_cache_instances parametresi vardır; bu değer, tablo önbelleğini parçalara ayırarak çok çekirdekli sistemlerde ölçeklenebilirliği artırmak için kullanılır. Öneri olarak table_open_cache_instances=8 olarak ayarlanabilir (özellikle büyük table_open_cache değerlerinde) . Bu, tablo önbelleğinin 8 parçaya bölünmesini ve farklı iş parçacıklarının tablo önbelleğini aynı anda daha az kilitleyerek kullanmasını sağlar.
  • İş Parçacığı Optimizasyonu (thread_cache_size ve Thread Pool): Varsayılan olarak MariaDB, her istemci bağlantısı için bir iş parçacığı (thread) yaratır. thread_cache_size, kullanım dışı kalan thread’lerin yeniden kullanılması için tutulacak önbellek boyutudur; bunu yeterince büyük tutarak yoğun bağlantı giriş-çıkışlarında her seferinde yeni thread oluşturma maliyetini azaltabilirsiniz (örneğin 100 veya 200 yapabilirsiniz). Ayrıca MariaDB’de thread pool (iş parçacığı havuzu) özelliği vardır. Özellikle CPU’ya yoğun ancak kısa süreli sorgu yüklerinde, thread pool kullanımı konteks değiştirme maliyetini azaltarak performansı artırabilir . Thread pool’u etkinleştirmek için thread_handling=pool-of-threads ayarı kullanılır (ve MariaDB’nin GPL sürümünde dahili olarak mevcuttur). Bu mod, aynı anda çalışan thread sayısını CPU çekirdeklerine uygun şekilde sınırlayıp, aşırı sayıda thread’in birbirini bekleme durumuna düşmesini engeller. Eğer sunucunuz binlerce eşzamanlı bağlantı alıyorsa veya OLTP tarzı kısa ve yoğun işlemler yapıyorsa, thread pool’u değerlendirebilirsiniz. Ancak I/O bekleme süresi uzun sorgularınız varsa thread pool sınırlı sayıda thread ile çalışacağı için dikkatle test edilmelidir.
  • Query Cache (Sorgu Önbelleği) Kullanımı: MySQL tarafında eski sürümlerde bulunan query cache özelliği, MariaDB’de halen desteklenmektedir. Query cache, aynı SQL sorgusu tekrar çalıştırıldığında sonucu bellekte tutup, veritabanına gitmeden yanıt vermeyi amaçlar. Teoride okuma yoğunluklu bazı iş yüklerinde fayda sağlayabilir; ancak pratikte yüksek yazma trafiği olan sistemlerde query cache bir yük haline gelebilir. Çünkü herhangi bir tabloya yazma yapıldığında o tabloyla ilgili cache girişleri geçersiz kılınır ve bu mekanizma yüksek eşzamanlılığa sahip ortamlarda kilitlenmelere yol açabilir. Bu nedenle MariaDB geliştiricileri, çok işlemcili ve yoğun yük altındaki sunucularda query cache’i devre dışı bırakmayı önermektedir . Eğer kullanmayacaksanız, en iyi yaklaşım my.cnf içinde query_cache_size=0 ve query_cache_type=OFF yapmaktır . MariaDB hala sorgu önbelleğini tamamen desteklese ve kaldırma planı olmasa da, genelde bu özelliğin yanlış kullanımı performansa zarar verebilir . Özetle, uygulamanızda aynı sorgular çok sık tekrarlanıyorsa ve veriler nadiren değişiyorsa query cache fayda sağlayabilir; aksi halde kapalı tutmanız veya dikkatle izlemeniz önerilir (Query cache kullanıldığında SHOW GLOBAL STATUS LIKE ‘Qcache%’; ile hit/miss oranlarını ve fragmantasyon durumunu takip edebilirsiniz).
  • Diğer Bellek Ayarları (join_buffer_size, sort_buffer_size vs.): MariaDB’de join_buffer_size ve sort_buffer_size gibi parametreler, sorgu bazında (her bağlantı için) bellek alanları tanımlar. Büyük join işlemleri veya sıralama işlemleri için bu bellek alanlarını arttırmak tekil sorgu performansını artırabilir. Ancak bu ayarlar her bağlantı için ayrı kullanıldığı için, değerlerini çok yükseltirseniz yüksek sayıda eşzamanlı bağlantıda sunucu belleğinin tükenmesine yol açabilirsiniz. Genel olarak, bu değerler gerekmedikçe varsayılan bırakılmalı, ihtiyaç duyulan belirli sorgular öncesinde SESSION düzeyinde artırılıp sonra eski haline alınmalıdır . Örneğin, çok büyük bir sorgu için session özelinde SET @@local.sort_buffer_size=256MB; gibi bir ayar yapıp, sorgu bitince geri almak tercih edilebilir.

Not: Yukarıdaki ayarları değiştirirken, değişiklikleri /etc/mysql/ altındaki konfigürasyon dosyalarınıza eklemeyi ve MariaDB servisinizde sonrasında bir restart yapmayı unutmayın (sudo systemctl restart mariadb). Değişikliklerden önce mutlaka mevcut değerleri SHOW GLOBAL VARIABLES LIKE ‘parametre_adi’; ile kontrol edin ve her parametrede yaptığınız iyileştirmenin etkisini izlemeniz önemlidir.

Sunucu İşletim Sistemi Düzeyi İpuçları

MariaDB’nin performans optimizasyonu sadece veritabanı parametreleri ile sınırlı değildir; sunucunun işletim sistemi ve donanım ayarları da önemli rol oynar. İşte özellikle yüksek yük altında çalışan bir MariaDB sunucusu için göz önüne alabileceğiniz bazı sistem düzeyi iyileştirmeler:

  • Swappiness Değerini Düşürün: Linux sistemlerde swappiness, belleğin ne ölçüde swap (disk üzerindeki takas alanı) için kullanılacağını belirler. Veritabanı sunucuları bellek üzerine hassastır ve veritabanının disk yerine RAM’de kalması çok daha yüksek performans sağlar. Bu nedenle, bellek tamamen dolmadıkça veritabanı sayfalarının swap’e atılmasını istemeyiz. Linux’ta swappiness değerini 1 gibi düşük bir değere çekmek yaygın bir uygulamadır (0 da verilebilir ancak 1 önerilir) . sudo sysctl -w vm.swappiness=1 komutuyla anlık olarak, /etc/sysctl.conf dosyasına vm.swappiness=1 satırını ekleyerek kalıcı olarak bu ayarı uygulayabilirsiniz. Bu sayede, sistem yalnızca bellek tükenme durumuna yakın swap kullanacak, normalde veritabanı bellekte tutulacaktır.
  • Açık Dosya Tanımlayıcı Limitlerini Artırın: MariaDB sunucusu, çok sayıda eşzamanlı bağlantı ve açık tabloyla çalışırken Linux’un dosya tanımlayıcı sınırlarına takılabilir. Çoğu Linux dağıtımı, bir süreç için 1024 adet açık dosya (file descriptor) sınırı ile gelir ki aktif bir veritabanı için düşük olabilir . Bu limiti artırmak için, /etc/security/limits.conf dosyasına aşağıdaki satırları ekleyebilirsiniz:
mysql soft nofile 65535
mysql hard nofile 65535

Bu, mysql kullanıcısı için (MariaDB daemon’ının çalıştığı kullanıcı) yumuşak ve sert açık dosya limitlerini 65535 olarak ayarlar . Değişiklik sonrası sistem yeniden başlatılarak veya MariaDB servisi uygun şekilde konfigüre edilerek (systemd için LimitNOFILE ayarı) yeni limitin geçerli olması sağlanmalıdır. Böylece yüksek bağlantı sayılarında veya çok sayıda tablo erişiminde “Too many open files” hatası alma ihtimaliniz ortadan kalkar.

  • Disk ve Dosya Sistemi Ayarları: Veritabanı performansında depolama biriminin hızı kritik önemdedir. Yüksek trafikli bir MariaDB sunucusunda SSD/NVMe disk kullanımı, geleneksel manyetik disklere göre çok daha iyi I/O performansı sağlar. Ayrıca, veritabanı veri dosyalarını (örneğin /var/lib/mysql dizinini) mümkünse ayrı bir hızlı disk bölümünde tutmak hem I/O çakışmalarını azaltır hem de yönetimi kolaylaştırır . Dosya sistemi olarak ext4 veya XFS genellikle iyi performans verir; montaj seçeneklerinde noatime bayrağını kullanmak, dosyalara her erişimde son erişim zamanını diske yazma işlemini devre dışı bırakarak gereksiz disk yazma yükünü azaltır . Bunun için ilgili satırı /etc/fstab dosyanızda örneğin defaults,noatime şeklinde ayarlayabilirsiniz . Son olarak, Linux I/O zamanlayıcısını (scheduler) ayarlamak da I/O performansına etki edebilir; modern SSD’ler için genellikle noop veya deadline gibi zamanlayıcılar önerilir, hatta NVMe cihazlarda zamanlayıcıyı “none” yaparak kontrolü cihaza bırakmak en iyi sonucu verebilir . Mevcut zamanlayıcıyı cat /sys/block/<cihaz>/queue/scheduler ile görebilir ve grub ayarlarında düzenleyerek kalıcı değiştirebilirsiniz. Bu sistem ayarları, veritabanının donanım olanaklarını tam kapasite kullanmasına yardımcı olacaktır.

Yukarıda listelenen ayar ve ipuçları, yüksek yük altında MariaDB performansını optimize etmek için en sık dikkate alınan noktaları içermektedir. Tabii ki her sistemin ihtiyacı farklı olabileceğinden, bu değerleri uyguladıktan sonra sunucunuzun davranışını izlemek çok önemlidir. MariaDB’nin durum değişkenlerini (SHOW GLOBAL STATUS) düzenli aralıklarla inceleyerek, örneğin buffer_pool_hit_rate, Created_tmp_disk_tables gibi metriklerin hedeflediğiniz seviyelerde olup olmadığını kontrol edebilirsiniz. Ayrıca sistem izleme araçları (top, iostat, vmstat vb.) ve özel veritabanı izleme yazılımları (Prometheus/Grafana, Percona PMM, Nagios/Zabbix eklentileri vs.) kullanarak CPU, bellek ve disk kullanımını takip etmek, yaptığınız ayarların etkisini ölçmenizi sağlar .

Sonuç

Bu rehberde, Ubuntu 24.04 üzerinde MariaDB’nin en son sürümünün kurulumu, güvenlik yapılandırması, veritabanı ve kullanıcı yönetimi ile yüksek performans için ince ayarlarını adım adım ele aldık. Doğru bir kurulum ve yapılandırma, MariaDB sunucunuzun kararlı ve hızlı çalışmasının temelini oluşturur. Özellikle yüksek trafikli veya büyük ölçekli veri işleme senaryolarında, MariaDB’nin bellek kullanımını ve I/O davranışını optimize etmek uygulama performansında fark yaratacaktır. Anlatılan ayarlar ve ipuçları, genel kabul görmüş en iyi uygulamalara dayanmaktadır. Kendi ortamınızda bu önerileri uygularken, sisteminizi yakından izlemeyi ve gerekirse değerleri kademeli olarak ayarlamayı unutmayın. Bu şekilde, MariaDB veritabanınızın güvenli, sağlam ve maksimum performansla çalışmasını sağlayabilir, uygulamalarınız ve analiz işleriniz için güvenilir bir altyapı oluşturabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir