---
title: 'Veritabanı Yönetimi ve Optimizasyon Rehberi'
url: 'https://www.emrekiran.com/sistem_rehberi/veritabani'
markdown: 'https://www.emrekiran.com/sistem_rehberi/veritabani.md'
lang: tr
date: '2026-10-15'
description: '🗄️ Veritabanı Yönetimi ve Optimizasyon Rehberi Hazırlayan: [kazakherif] Tarih: 2026-10-15 Amaç: İlişkisel ve NoSQL veritabanı sistemlerinin yönetimi, performans optimizasyonu, yedekleme stratejileri ve sorun giderme adımları. 1. Veritabanı (Database) Nedir? Açıklama: Verilerin elektronik ortamda dü…'
---

# 🗄️ Veritabanı Yönetimi ve Optimizasyon Rehberi

Hazırlayan: \[kazakherif\]

Tarih: 2026-10-15

Amaç: İlişkisel ve NoSQL veritabanı sistemlerinin yönetimi, performans optimizasyonu, yedekleme stratejileri ve sorun giderme adımları.

## 1. Veritabanı (Database) Nedir?

### Açıklama:

Verilerin elektronik ortamda düzenli bir şekilde depolanmasını, yönetilmesini ve hızlıca erişilmesini sağlayan sistemlerdir.

## 2. RDBMS (İlişkisel Veritabanı)

### Açıklama:

Verileri tablolar halinde (satır ve sütunlar) tutan ve tablolar arasında mantıksal ilişkiler kuran sistemlerdir (MySQL, PostgreSQL, Oracle).

## 3. NoSQL (İlişkisel Olmayan Veritabanı)

### Açıklama:

Esnek veri modelleri kullanan, doküman (MongoDB), anahtar-değer (Redis) veya grafik tabanlı çalışabilen yüksek performanslı veritabanlarıdır.

## 4. ACID Prensipleri

### Açıklama:

İlişkisel veritabanlarında veri bütünlüğünü garanti eden 4 temel özelliktir: Atomicity (Bölünemezlik), Consistency (Tutarlılık), Isolation (İzolasyon), Durability (Kalıcılık).

## 5. Index (Dizin) Nedir?

### Açıklama:

Kitaplardaki içindekiler bölümü gibi çalışarak, veritabanında aranan kaydın tüm tabloyu taramadan (Table Scan) çok hızlı bulunmasını sağlayan veri yapısıdır.

## 6. Primary Key (Birincil Anahtar)

### Açıklama:

Bir tablodaki her bir kaydı benzersiz (unique) olarak tanımlayan sütundur. (Örn: TC Kimlik No, Kullanıcı ID).

## 7. Foreign Key (Yabancı Anahtar)

### Açıklama:

İki tablo arasında ilişki kurmak için kullanılan ve başka bir tablonun Primary Key'ine referans veren sütundur.

## 8. Normalizasyon

### Açıklama:

Veri tekrarını (redundancy) önlemek ve veri bütünlüğünü artırmak için veritabanı tablolarının belirli kurallara (1NF, 2NF, 3NF) göre tasarlanması işlemidir.

## 9. View (Sanal Tablo)

### Açıklama:

Karmaşık SQL sorgularının sonucunu, sanki fiziksel bir tabloymuş gibi saklayan ve çağırmayı kolaylaştıran sanal tablolardır.

## 10. Stored Procedure (Saklı Yordam)

### Açıklama:

Veritabanı sunucusunda derlenip saklanan ve dışarıdan parametre alarak karmaşık işlemleri (iş mantığını) hızlıca gerçekleştiren SQL kod bloklarıdır.

## 11. MySQL: Servis Durumunu Kontrol Etme

### Açıklama:

Linux sistemlerde MySQL/MariaDB servisinin çalışıp çalışmadığını kontrol eder.

### Komutlar:

```bash
sudo systemctl status mysql
```

## 12. MySQL: Komut Satırından Bağlanma

### Açıklama:

MySQL sunucusuna terminal üzerinden root kullanıcısı ile bağlanmayı sağlar.

### Komutlar:

```bash
mysql -u root -p
```

## 13. MySQL: Tüm Veritabanlarını Listeleme

### Açıklama:

Sunucu üzerindeki mevcut tüm veritabanı isimlerini gösterir.

### Komutlar:

```sql
SHOW DATABASES;
```

## 14. MySQL: Veritabanı Seçme ve Tabloları Görme

### Açıklama:

İşlem yapılacak veritabanını seçer ve içindeki tabloları listeler.

### Komutlar:

```sql
USE sirket_db;
SHOW TABLES;
```

## 15. MySQL: Yeni Veritabanı Oluşturma

### Açıklama:

Türkçe karakter desteği (utf8mb4) ile düzgün bir şekilde yeni veritabanı yaratır.

### Komutlar:

```sql
CREATE DATABASE sirket_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

## 16. MySQL: Kullanıcı Oluşturma

### Açıklama:

Sadece belirli bir IP'den veya localhost'tan bağlanabilecek yeni bir kullanıcı hesabı açar.

### Komutlar:

```sql
CREATE USER 'yeni_kullanici'@'localhost' IDENTIFIED BY 'GucluSifre123!';
```

## 17. MySQL: Kullanıcıya Yetki Verme

### Açıklama:

Oluşturulan kullanıcıya belirli bir veritabanı üzerinde tam yetki (ALL PRIVILEGES) atar.

### Komutlar:

```sql
GRANT ALL PRIVILEGES ON sirket_db.* TO 'yeni_kullanici'@'localhost';
FLUSH PRIVILEGES;
```

## 18. MySQL: Tablo Yapısını İnceleme

### Açıklama:

Bir tablodaki sütunları, veri tiplerini ve index durumlarını listeler.

### Komutlar:

```sql
DESCRIBE kullanicilar;
```

## 19. MySQL: Aktif Sorguları (Processlist) Görme

### Açıklama:

O an veritabanını yoran, kilitlenen veya uzun süren sorguları ve PID'lerini gösterir.

### Komutlar:

```sql
SHOW FULL PROCESSLIST;
```

## 20. MySQL: Kilitlenen Sorguyu (Kill) Sonlandırma

### Açıklama:

Processlist'ten alınan ID numarası ile sistemi yoran bir sorguyu zorla iptal eder.

### Komutlar:

```sql
KILL 12345;
```

## 21. PostgreSQL: Servis Durumunu Kontrol Etme

### Açıklama:

PostgreSQL veritabanı servisinin çalışma durumunu Linux üzerinde sorgular.

### Komutlar:

```bash
sudo systemctl status postgresql
```

## 22. PostgreSQL: psql ile Bağlanma

### Açıklama:

Varsayılan `postgres` kullanıcısı ile komut satırı arayüzüne giriş yapar.

### Komutlar:

```bash
sudo -u postgres psql
```

## 23. PostgreSQL: Veritabanlarını ve Tabloları Listeleme

### Açıklama:

psql arayüzünde veritabanlarını listelemek (`\l`) ve tabloları görmek (`\dt`) için kullanılan kısayollardır.

### Komutlar:

```sql
\l
\c veritabani_adi
\dt
```

## 24. PostgreSQL: Kullanıcı (Role) ve Veritabanı Oluşturma

### Açıklama:

Terminal arayüzünden hızlıca kullanıcı (rol) ve ona ait bir veritabanı oluşturur.

### Komutlar:

```sql
CREATE ROLE ahmet WITH LOGIN PASSWORD 'sifre123';
CREATE DATABASE proje_db OWNER ahmet;
```

## 25. PostgreSQL: Aktif Bağlantıları Görme

### Açıklama:

Sisteme bağlı kullanıcıları, sorgu sürelerini ve durumlarını (active/idle) görüntüler.

### Komutlar:

```sql
SELECT pid, usename, state, query FROM pg_stat_activity;
```

## 26. Veritabanı İçe Aktarma (MySQL Restore)

### Açıklama:

Mevcut bir `.sql` yedek dosyasını MySQL veritabanına geri yükler.

### Komutlar:

```bash
mysql -u root -p sirket_db < yedek.sql
```

## 27. Veritabanı Dışa Aktarma (MySQL Dump)

### Açıklama:

MySQL veritabanının tam yapısını ve verilerini bir dosyaya yedekler.

### Komutlar:

```bash
mysqldump -u root -p sirket_db > yedek.sql
```

## 28. PostgreSQL Dışa Aktarma (pg\_dump)

### Açıklama:

PostgreSQL veritabanını sıkıştırılmış (custom format) olarak yedekler.

### Komutlar:

```bash
pg_dump -U postgres -Fc proje_db > proje_yedek.dump
```

## 29. PostgreSQL İçe Aktarma (pg\_restore)

### Açıklama:

Custom formatta alınmış PostgreSQL yedeğini sunucuya geri yükler.

### Komutlar:

```bash
pg_restore -U postgres -d proje_db -1 proje_yedek.dump
```

## 30. Optimizasyon: Slow Query Log (Yavaş Sorgular)

### Açıklama:

Sistemi yavaşlatan sorguların tespit edilmesi için (Örn: 2 saniyeden uzun sürenler) MySQL/PostgreSQL ayarlarından yavaş sorgu loglamanın açılmasıdır.

## 31. Optimizasyon: EXPLAIN Kullanımı

### Açıklama:

Bir SQL sorgusunun veritabanı motoru tarafından nasıl çalıştırılacağını (Hangi indexleri kullanıp kullanmadığını) analiz eder. Performans ayarlarının temelidir.

### Komutlar:

```sql
EXPLAIN SELECT * FROM kullanicilar WHERE email = 'test@test.com';
```

## 32. Optimizasyon: EXPLAIN ANALYZE (PostgreSQL)

### Açıklama:

Sorguyu sadece planlamakla kalmaz, gerçekten çalıştırıp milisaniye cinsinden gerçek çalışma sürelerini ekrana basar.

### Komutlar:

```sql
EXPLAIN ANALYZE SELECT * FROM siparisler WHERE durum = 'Bekliyor';
```

## 33. Optimizasyon: Tablo Taraması (Full Table Scan) Nedir?

### Açıklama:

Sorgulanan veriyi bulmak için veritabanının index kullanmadan tablodaki milyonlarca satırı tek tek okumasıdır. Sistemin en büyük düşmanıdır.

## 34. Optimizasyon: B-Tree Index Oluşturma

### Açıklama:

Aramaları (WHERE koşulları) hızlandırmak için en yaygın kullanılan dizin (index) türüdür.

### Komutlar:

```sql
CREATE INDEX idx_kullanici_email ON kullanicilar (email);
```

## 35. Optimizasyon: Composite (Çoklu) Index

### Açıklama:

Birden fazla sütunu birlikte arayan (Örn: Ad ve Soyad) sorguları hızlandırmak için iki sütuna birden tek bir index atılmasıdır.

### Komutlar:

```sql
CREATE INDEX idx_ad_soyad ON personel (ad, soyad);
```

## 36. Optimizasyon: N+1 Sorgu Problemi

### Açıklama:

Yazılımların (ORM araçlarının) 1 ana sorgu atıp, çıkan 100 sonuç için veritabanına 100 ayrı sorgu daha atmasıdır. `JOIN` (Birleştirme) ile çözülmelidir.

## 37. Optimizasyon: SELECT \* Kullanımından Kaçınma

### Açıklama:

Sadece 2 sütuna ihtiyaç varken `SELECT *` ile tablodaki 50 sütunun birden çekilmesi ağ bant genişliğini ve RAM'i felç eder. İhtiyaç olan sütunlar belirtilmelidir.

## 38. Optimizasyon: LIMIT ve OFFSET Kullanımı (Sayfalama)

### Açıklama:

Milyonlarca veriyi tek seferde çekmek yerine (Örn: Web arayüzünde), verileri 50'şer 50'şer sayfalayarak getirme kuralıdır.

### Komutlar:

```sql
SELECT ad, soyad FROM musteriler ORDER BY id LIMIT 50 OFFSET 100;
```

## 39. Optimizasyon: Veritabanı Bağlantı Havuzu (Connection Pooling)

### Açıklama:

Her istekte yeni bir veritabanı bağlantısı açıp kapatmak çok maliyetlidir. Havuz, hazırda açık bağlantılar tutarak gelen isteklere bunları tahsis eder (Örn: PgBouncer, HikariCP).

## 40. PostgreSQL: PgBouncer Kurulumu ve Kullanımı

### Açıklama:

PostgreSQL için geliştirilmiş, on binlerce isteği küçük bir bağlantı havuzunda eriterek veritabanının çökmesini engelleyen hafif middleware aracıdır.

## 41. Optimizasyon: Veritabanı Önbellekleme (Caching)

### Açıklama:

Çok sık sorgulanan ancak nadir değişen verilerin (Örn: Ülke listesi) veritabanı yerine RAM üzerinde (Redis, Memcached) tutularak veritabanı yükünün sıfırlanmasıdır.

## 42. Redis: In-Memory Veritabanı

### Açıklama:

Anahtar-değer (Key-Value) yapısıyla tüm veriyi RAM'de tuttuğu için milisaniyenin altında cevap veren, önbellek ve session yönetimi için kullanılan sistemdir.

## 43. Redis: Servis Kontrolü ve Bağlantı

### Açıklama:

Redis sunucusunun çalışıp çalışmadığını test eder.

### Komutlar:

```bash
redis-cli ping
# Çıktı: PONG
```

## 44. Veri Replikasyonu (Replication) Master-Slave

### Açıklama:

Yazma işlemlerinin ana (Master) sunucuya yapılıp, okuma işlemlerinin anında kopyalanan (Slave/Replica) sunuculardan yapılarak yükün dağıtılması mimarisidir.

## 45. Sharding (Yatay Bölümleme)

### Açıklama:

Tablo milyarlarca satıra ulaştığında, verilerin (Örn: A-M harfi arası 1. sunucuda, N-Z arası 2. sunucuda) birden fazla fiziksel sunucuya paylaştırılmasıdır.

## 46. Veritabanı Kümeleme (Clustering)

### Açıklama:

Yüksek erişilebilirlik (HA) için birden fazla veritabanı sunucusunun tek bir sistemmiş gibi çalışarak arıza durumunda kesintisiz devam etmesidir (Örn: Galera Cluster).

## 47. PostgreSQL: VACUUM İşlemi

### Açıklama:

Postgres'te güncellenen veya silinen satırlar fiziksel olarak hemen silinmez ("Dead Tuples"). Vacuum, bu ölü alanları temizleyerek disk alanını geri kazandırır.

### Komutlar:

```sql
VACUUM ANALYZE tablo_adi;
```

## 48. PostgreSQL: Otomatik Vacuum (Autovacuum) İzleme

### Açıklama:

Dead tuple'ların sistemi yavaşlatmasını engellemek için arka planda çalışan Autovacuum servisini sürekli açık tutmak hayati önem taşır.

## 49. MySQL: Tablo Optimizasyonu (Optimize Table)

### Açıklama:

Çok fazla kayıt silindiğinde oluşan disk parçalanmalarını (Defragmentation) gidererek MySQL tablosunu sıkıştırır ve hızlandırır.

### Komutlar:

```sql
OPTIMIZE TABLE siparisler;
```

## 50. Güvenlik: SQL Injection Koruması

### Açıklama:

Uygulamaların, kullanıcıdan gelen veriyi doğrudan SQL sorgusuna eklemesi sonucu oluşan zafiyettir. ORM kullanımı ve "Prepared Statements" ile çözülür.

## 51. Güvenlik: Veritabanı Dışa Kapatma (Bind Address)

### Açıklama:

Veritabanı sunucusunun tüm internete açık olmasını engellemek için sadece yerel ağdan (veya localhost'tan) bağlantı kabul edecek şekilde ayarlanmasıdır.

### Ayar (my.cnf veya postgresql.conf):

```ini
bind-address = 127.0.0.1
```

## 52. PostgreSQL: pg\_hba.conf Dosyası

### Açıklama:

Postgresql'e kimin, hangi IP adresinden ve hangi doğrulama yöntemiyle (MD5, SCRAM, Trust) bağlanabileceğini belirten güvenlik ayar dosyasıdır.

## 53. Yedekleme Stratejisi: Point-in-Time Recovery (PITR)

### Açıklama:

Veritabanının sadece günlük yedeğini almakla kalmayıp, işlem loglarını (WAL/Binlog) saklayarak sistemin geçmişteki *saniyesine* geri döndürülebilmesini sağlar.

## 54. MySQL: Binary Log (Binlog) Aktifleştirme

### Açıklama:

MySQL'de veritabanında yapılan tüm değişiklikleri sırasıyla kaydeden, hem replikasyon hem de PITR (Geriye dönük kurtarma) için şart olan kayıt sistemidir.

## 55. PostgreSQL: WAL (Write-Ahead Logging)

### Açıklama:

Postgresql'de veriler diske yazılmadan önce, olası bir elektrik kesintisine karşı tüm işlemlerin güvenli şekilde işlendiği log dosyalarıdır.

## 56. İstatistik Güncelleme (ANALYZE)

### Açıklama:

Veritabanı motorunun (Query Planner) en iyi yolu (index'i) seçebilmesi için tablolardaki mevcut verilerin dağılım istatistiklerini günceller.

### Komutlar:

```sql
ANALYZE musteriler;
```

## 57. Tablo Kilitleme (Table Lock) vs Satır Kilitleme (Row Lock)

### Açıklama:

Eski motorlarda (MyISAM) bir kayıt güncellenirken tüm tablo kilitlenirdi. Modern motorlarda (InnoDB) sadece ilgili satır kilitlenerek eşzamanlı çalışma performansı artırılır.

## 58. MySQL InnoDB Motoru

### Açıklama:

MySQL'in varsayılan, ACID uyumlu, Foreign Key ve satır kilitleme (Row-level locking) destekleyen modern depolama motorudur.

## 59. Deadlock (Ölümcül Kilitlenme)

### Açıklama:

İki farklı sorgunun, birbirlerinin kilitlediği kaynakları (satırları) karşılıklı beklemesi sonucu sonsuz döngüye girip çakışması durumudur.

## 60. Büyük Veri (Bulk) İçe Aktarma Optimizasyonu

### Açıklama:

Milyonlarca satır veri yüklerken işlemi hızlandırmak için geçici olarak Foreign Key kontrollerini ve Indexlemeyi kapatma yöntemidir.

## 61. PostgreSQL: JSON/JSONB Veri Tipi

### Açıklama:

İlişkisel bir veritabanı olan Postgresql içinde NoSQL gibi esnek çalışmayı, JSON verilerini saklamayı ve indekslemeyi (JSONB) sağlayan mükemmel veri tipidir.

## 62. MySQL/MariaDB: OOM (Out of Memory) Killer Tespiti

### Açıklama:

Sunucunun RAM'i bittiğinde Linux işletim sisteminin MySQL servisini zorla öldürmesidir. Genellikle `innodb_buffer_pool_size` yanlış ayarlandığında yaşanır.

### Komutlar:

```bash
dmesg | grep -i 'killed process'
```

## 63. Optimizasyon: innodb\_buffer\_pool\_size Ayarı

### Açıklama:

MySQL'in tabloları ve indexleri RAM'de önbelleğe alması için ayrılan alandır. Genellikle sunucudaki toplam fiziksel RAM'in %60-70'i olarak ayarlanmalıdır.

## 64. PostgreSQL: shared\_buffers Ayarı

### Açıklama:

PostgreSQL'in kendi önbelleği için ayırdığı RAM miktarıdır. Genellikle toplam RAM'in %25'i olarak ayarlanması tavsiye edilir (Çünkü Postgres OS cache'i de kullanır).

## 65. PostgreSQL: work\_mem Ayarı

### Açıklama:

Sıralama (ORDER BY) ve karma işlemleri (Hash joins) için her bağlantıya atanan bellek miktarıdır. Düşükse sorgular yavaşlar, yüksekse RAM biter (OOM).

## 66. Veritabanı Migrasyonu (Migration)

### Açıklama:

Uygulamanın versiyonu değiştikçe veritabanındaki tabloların, sütunların kontrollü ve kod üzerinden güncellenmesi sürecidir (Flyway, Liquibase, Prisma).

## 67. NoSQL: MongoDB Temelleri

### Açıklama:

Tablo yerine Koleksiyon (Collection), satır yerine JSON formatında Doküman (Document) kullanan, yatay ölçeklemeye çok uygun bir NoSQL veritabanıdır.

## 68. MongoDB: Veritabanı Yedekleme (mongodump)

### Açıklama:

BSON formatında MongoDB verilerinin hızlıca yedeğini alır.

### Komutlar:

```bash
mongodump --db=proje_db --out=/yedekler/
```

## 69. MongoDB: Veri Geri Yükleme (mongorestore)

### Açıklama:

Alınan BSON yedeklerini tekrar sunucuya yükler.

### Komutlar:

```bash
mongorestore --db=proje_db /yedekler/proje_db/
```

## 70. Yetki Kontrolü: Principle of Least Privilege

### Açıklama:

Bir uygulamaya veritabanında sadece ihtiyacı olan yetkilerin verilmesidir (Örn: Raporlama aracına sadece SELECT izni verilmeli, UPDATE izni verilmemelidir).

## 71. Time-Series (Zaman Serisi) Veritabanları

### Açıklama:

IoT sensör verileri veya sunucu logları gibi saniyede binlerce kez zaman damgasıyla (timestamp) gelen verileri işlemek için optimize edilmiş sistemlerdir (InfluxDB, TimescaleDB).

## 72. ORM (Object-Relational Mapping) Nedir?

### Açıklama:

Yazılımcıların doğrudan SQL yazmak yerine, veritabanı tablolarını kod tarafında Nesneler (Class) olarak yönetmesini sağlayan araçlardır (Hibernate, Entity Framework, Prisma).

## 73. Veritabanı Triggers (Tetikleyiciler)

### Açıklama:

Bir tabloda INSERT, UPDATE veya DELETE işlemi gerçekleştiğinde otomatik olarak başka bir işlemi (Örn: Loglama) tetikleyen veritabanı kodlarıdır.

## 74. Değişiklik Veri Yakalama (CDC - Change Data Capture)

### Açıklama:

Veritabanında değişen her veriyi anlık olarak yakalayıp (Binlog/WAL üzerinden) farklı sistemlere (Elasticsearch, Kafka) senkronize eden araçlardır (Örn: Debezium).

## 75. Bağlantı Zaman Aşımı (Connection Timeout) Ayarları

### Açıklama:

Uygulama ile veritabanı arasındaki bağlantının ne kadar süre cevap gelmezse koparılacağını belirterek zombi bağlantıların sistemi kilitlemesini önler.

## 76. Collation ve Character Set Hataları

### Açıklama:

Veritabanında "ş, ğ, ç" gibi karakterlerin "?" olarak görünmesini engellemek için tablo, kolon ve bağlantı karakter setinin (utf8mb4) eşleşmesi işlemidir.

## 77. Büyük Veri Silme İşlemleri (TRUNCATE vs DELETE)

### Açıklama:

`DELETE` satırları tek tek siler ve işlemi loglar (yavaştır). `TRUNCATE` tablonun içini tamamen sıfırlar ve çok daha hızlıdır (Geri alınamaz).

## 78. Parçalı Tablo Yapısı (Table Partitioning)

### Açıklama:

Yüz milyonlarca satırlık büyük bir tabloyu fiziksel olarak aylara veya yıllara bölerek sorgu sürelerini kısaltma mimarisidir.

## 79. Veritabanı Disk Türü Seçimi (NVMe/SSD)

### Açıklama:

Veritabanları rastgele (random) I/O işlemlerini çok kullandığı için mekanik diskler (HDD) veritabanlarında kesinlikle dar boğaz yaratır, SSD/NVMe kullanılmalıdır.

## 80. Veritabanı Metriklerini İzleme (Prometheus & Grafana)

### Açıklama:

Veritabanının anlık RAM kullanımı, sorgu gecikmeleri ve saniyedeki okuma/yazma hızlarının (QPS) `postgres_exporter` veya `mysqld_exporter` ile izlenmesidir.

## 81. CAP Teoremi

### Açıklama:

Dağıtık bir veritabanının aynı anda Tutarlılık (Consistency), Erişilebilirlik (Availability) ve Bölünme Toleransı (Partition Tolerance) özelliklerinin en fazla ikisini garanti edebileceğini belirten kuraldır.

## 82. Soft Delete (Geçici Silme)

### Açıklama:

Veriyi tablodan `DELETE` ile fiziksel olarak silmek yerine, bir `is_deleted = 1` veya `deleted_at = tarih` kolonu ekleyerek veri kaybını önleme stratejisidir.

## 83. Yük Testi (Load Testing) ile Darboğaz Tespiti

### Açıklama:

Veritabanının maksimum kaç kullanıcıyı kaldırabileceğini görmek için (Örn: pgbench veya sysbench) sentetik sorgularla stress testi yapılmasıdır.

## 84. SQL Formatlama ve Standartlar

### Açıklama:

Ekip içinde yazılan SQL sorgularının okunabilir olması için komutların büyük harfle (SELECT, WHERE), sütunların küçük harfle yazılması kuralıdır.

## 85. UUID vs Integer (Auto Increment) Primary Key

### Açıklama:

Otomatik artan Integer anahtarlar hızlıdır ve az yer kaplar. UUID'ler (Rastgele stringler) ise güvenlidir, tahmin edilemez (IDOR koruması) ve dağınık sistemlerde çakışmayı önler.

## 86. Hiyerarşik Veri Saklama

### Açıklama:

Kategori-Alt Kategori gibi ağaç (Tree) yapılarını veritabanında saklarken Parent\_ID yöntemi veya Ltree (PostgreSQL) uzantısının kullanılmasıdır.

## 87. Full-Text Search (Tam Metin Arama)

### Açıklama:

"LIKE '%kelime%'" sorgusunun yavaşlığını aşmak için, uzun metin makaleleri içinde geçen kelimelerin Google mantığıyla kelime dizinlerine ayrılarak hızlı aranmasıdır.

## 88. Güvenlik: Veri Maskeleme (Data Masking)

### Açıklama:

Üretim (Production) veritabanı yedeğinin test ortamlarına alınırken şifre, email, kredi kartı gibi gerçek verilerin anlamsız verilerle değiştirilerek anonimleştirilmesidir.

## 89. Güvenlik: TDE (Transparent Data Encryption)

### Açıklama:

Sunucunun diski fiziksel olarak çalınsa bile veritabanı dosyalarının okunamaması için disk seviyesinde şifreleme uygulanmasıdır.

## 90. Veritabanı Bağımlılığını Azaltma (Vendor Lock-in)

### Açıklama:

Kodun sadece Oracle veya sadece MSSQL'e özgü komutlarla yazılması yerine, standart ANSI SQL kurallarına uygun yazılarak gelecekte veritabanı taşıma işlemlerinin kolaylaştırılmasıdır.

## 91. Geçici Tablolar (Temporary Tables)

### Açıklama:

Sadece o anki bağlantı oturumu (Session) boyunca yaşayan, oturum kapandığında veritabanından otomatik silinen geçici hesaplama tablolarıdır.

## 92. Çöp Toplama (Garbage Collection / Purge)

### Açıklama:

Veritabanındaki işlem geçmişlerinin ve eski versiyonların sistemin performansını düşürmeden düzenli olarak temizlenmesidir.

## 93. MySQL: innodb\_flush\_log\_at\_trx\_commit Ayarı

### Açıklama:

Performans ve güvenlik ayarıdır. "1" değeri tam güvenlik (her an diske yazar), "2" değeri yüksek hız (saniyede bir diske yazar, elektrik kesintisinde 1 sn kayıp olabilir) sağlar.

## 94. PostgreSQL: pg\_stat\_statements Eklentisi

### Açıklama:

Hangi sorgunun kaç kez çalıştığını, toplamda ve ortalamada ne kadar CPU süresi harcadığını listeleyen muazzam bir performans izleme uzantısıdır.

## 95. Uzun Süren İşlemleri Arka Plana Alma

### Açıklama:

Web kullanıcısının veritabanını beklememesi için ağır rapor çekme veya toplu mail atma işlemlerinin veritabanına direkt değil, kuyruk sistemlerine (RabbitMQ/Celery) aktarılmasıdır.

## 96. Ortamların Ayrılması (Dev/Test/Prod)

### Açıklama:

Geliştiricilerin doğrudan canlı (Production) veritabanında test yapmasını engellemek için veritabanlarının fiziksel ve ağ olarak ayrılması mimarisidir.

## 97. Active-Active Mimari ve Çakışmalar (Split-Brain)

### Açıklama:

İki veritabanının da aynı anda yazma işlemi kabul ettiği mimarilerde, aralarındaki bağlantı koparsa ikisinin de kendini "Patron" sanıp farklı veriler kaydetmesi ve verinin çürümesi (Split-Brain) sorunudur.

## 98. Veritabanı Yükseltme Stratejisi (Blue-Green Deployment)

### Açıklama:

Yeni veritabanı versiyonuna geçerken canlı sistemi kapatmak yerine, yanında yeni bir kopya oluşturup (Green) veriyi senkronize ettikten sonra trafiği kesintisiz yenisine yönlendirme işlemidir.

## 99. DBaaS (Database as a Service)

### Açıklama:

Yedekleme, güncelleme, disk yönetimi gibi sistem süreçlerinin AWS (RDS), Supabase veya PlanetScale gibi bulut sağlayıcıları tarafından yönetildiği zahmetsiz veritabanı hizmetleridir.

## 100. Always Backup Your Backup (Yedeklerinizi Test Edin)

### Açıklama:

Veritabanı yöneticisinin en önemli altın kuralı: "Alındığını sandığınız ama geri yüklenemeyen (Restore edilemeyen) yedek, yedek değildir." Düzenli olarak boş bir sunucuya restore testleri yapılmalıdır.

---

## Navigation

- Parent: [Sistem Rehberi](https://www.emrekiran.com/sistem_rehberi.md)
- Previous: [RustDesk Kurulum Rehberi](https://www.emrekiran.com/sistem_rehberi/rustdesk.md)
- Next: [Telekomünikasyon ve NMS/OSS Sistem Rehberi](https://www.emrekiran.com/sistem_rehberi/telekomunikasyon.md)
