Dijital Ürün Alış ve Satışı için: Buraya Tıkla

Sesli dinle

Foreign Key Kontrollerini Kapatmak Neden Gündeme Gelir?

Büyük veritabanı işlemlerinde, milyonlarca kaydın içe aktarılması veya toplu güncellemeler sırasında foreign key (yabancı anahtar) denetimleri ciddi miktarda işlem yükü oluşturabilir. Bu nedenle sistem yöneticileri ve geliştiriciler bazen foreign key kontrollerini geçici olarak devre dışı bırakarak veri aktarım hızını artırmayı tercih ederler.

Ancak bu işlem yalnızca performans açısından değerlendirilmemeli, veri bütünlüğü üzerindeki etkileri de dikkate alınmalıdır. Özellikle global seviyede yapılan değişiklikler tüm veritabanı bağlantılarını etkileyebileceğinden dikkatli kullanılmalıdır.


Foreign Key Nedir?

Foreign Key, bir tablodaki verinin başka bir tablodaki kayıtlarla ilişkili olmasını sağlayan veritabanı kısıtlamasıdır.

Örneğin: Markalar

marka_id marka_adi
1 BMW
2 Audi

Modeller

model_id marka_id model_adi
1 1 X5
2 2 A6

Bu yapıda marka_id alanı foreign key olarak tanımlanabilir. Böylece sistem mevcut olmayan bir markaya model eklenmesini engeller.


Oturum Bazında (Session) Foreign Key Kontrolünü Kapatma

Sadece mevcut bağlantıyı etkiler.

SET FOREIGN_KEY_CHECKS = 0;

Tekrar açmak için:

SET FOREIGN_KEY_CHECKS = 1;

Özellikleri

Özellik Durum
Sadece mevcut bağlantıyı etkiler Evet
Sunucu yeniden başlatıldığında korunur Hayır
Diğer kullanıcıları etkiler Hayır
En güvenli yöntem Evet

Global Foreign Key Kontrolünü Kapatma

Sunucuya yeni bağlanan tüm istemciler için geçerli olur.

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

Yeniden etkinleştirmek için:

SET GLOBAL FOREIGN_KEY_CHECKS = 1;

Özellikleri

Özellik Durum
Tüm yeni bağlantıları etkiler Evet
Mevcut bağlantıları etkiler Hayır
Sunucu yeniden başlatılınca sıfırlanır Genellikle Evet
Root veya SUPER yetkisi gerekir Evet

Global Ayarın Kalıcı Yapılması

MySQL veya MariaDB yeniden başlatıldığında ayarın korunması isteniyorsa yapılandırma dosyasına eklenebilir.

Linux

[mysqld]
foreign_key_checks=0

Windows

[mysqld]
foreign_key_checks=0

Ardından servis yeniden başlatılır.

Üretim ortamlarında kalıcı olarak kapatılması önerilmez.


Foreign Key Kontrolleri Neden Kapatılır?

Toplu Veri Aktarımı

Milyonlarca satırlık verinin aktarımında performansı artırır.

Backup Geri Yükleme

Yedek dosyalarının tablo sırasından bağımsız yüklenmesini kolaylaştırır.

Veri Migrasyonu

Sunucular arası taşıma işlemlerini hızlandırır.

ETL Süreçleri

Veri ambarı projelerinde yükleme sürelerini azaltabilir.

Test Ortamları

Geliştirme süreçlerinde esneklik sağlar.


Avantajları

Avantaj Açıklama
Daha hızlı INSERT işlemleri Referans kontrolü yapılmaz
Daha hızlı UPDATE işlemleri İlişkisel doğrulama yükü azalır
Hızlı veri importu Büyük SQL dosyaları daha kısa sürede yüklenir
Daha hızlı restore Backup geri yükleme süreleri düşebilir
ETL süreçleri için uygun Veri dönüşüm işlemleri hızlanır

Riskleri

Risk Açıklama
Veri bütünlüğü bozulabilir Hatalı ilişkiler oluşabilir
Yetim kayıtlar oluşabilir Ana kayıt olmadan alt kayıtlar kalabilir
Uygulama hataları çıkabilir Beklenmeyen sonuçlar üretilebilir
Veri temizliği zorlaşır Sorunlar sonradan fark edilebilir
SEO tarafında dolaylı sorunlar oluşabilir Hatalı içerik ilişkileri oluşabilir

Performans Kazancı

Gerçek kazanç tablo yapısına bağlıdır.

Veri Miktarı Ortalama Hız Kazancı
10.000 kayıt %5 - %15
100.000 kayıt %15 - %35
1 milyon kayıt %30 - %60
10 milyon+ kayıt %40 - %80

Mevcut Durumu Kontrol Etme

Oturum bazında:

SELECT @@FOREIGN_KEY_CHECKS;

Global değer:

SELECT @@GLOBAL.FOREIGN_KEY_CHECKS;

Oturum değeri:

SELECT @@SESSION.FOREIGN_KEY_CHECKS;

Tüm Değişkenleri Görüntüleme

SHOW VARIABLES LIKE 'foreign_key_checks';

PHP PDO ile Foreign Key Kontrolünü Geçici Kapatma

$pdo->exec("SET FOREIGN_KEY_CHECKS=0");
// Toplu işlemler
$pdo->exec("SET FOREIGN_KEY_CHECKS=1");

SEO Açısından Etkileri

Foreign key kontrollerinin kapatılması doğrudan Google sıralamalarını etkilemez. Ancak ilişkisel verilerin bozulması durumunda:

  • Yanlış araç sayfaları oluşabilir.
  • Bozuk kategori ilişkileri meydana gelebilir.
  • 404 hataları artabilir.
  • Dahili link yapısı zarar görebilir.
  • Yinelenen içerikler oluşabilir.

Bu nedenle özellikle büyük otomotiv portalları, e-ticaret siteleri ve içerik yönetim sistemlerinde foreign key kontrolleri yalnızca kısa süreli bakım işlemleri sırasında devre dışı bırakılmalıdır.


SET FOREIGN_KEY_CHECKS=0 komutu yalnızca mevcut bağlantıyı etkilerken, SET GLOBAL FOREIGN_KEY_CHECKS=0 komutu sunucu genelinde yeni bağlantılar için geçerli olur. Toplu veri aktarımı, backup geri yükleme ve migrasyon işlemlerinde önemli performans avantajları sağlayabilir. Ancak veri bütünlüğünü koruyan mekanizmayı devre dışı bıraktığı için işlem tamamlandıktan sonra mutlaka tekrar etkinleştirilmeli ve veriler doğrulanmalıdır.


foreign key checks, foreign key kapatma, mysql foreign key checks, mariaDB foreign key checks, set global foreign_key_checks, foreign key constraint fails, mysql performans artırma, mysql optimizasyon, veritabanı hızlandırma, php foreign key checks, mysql backup restore, mysql import hızlandırma, mysql veri aktarımı, global foreign key checks, session foreign key checks, mysql veri bütünlüğü, database optimization, foreign key kontrolü kapatma, mysql tuning, mariadb foreign key yönetimi


Yorumlar (0)
henüz yorum yok
Tema Ayarları

Kendi özelleştirilmiş stilini belirle

Mod Seç

Uygulamanız için mükemmel renk modunu seçin.


RTL Mode

Dil yönünüzü değiştirin


Fluid Layout

Tam ekran modu aç/kapat


Navigasyon Konumu

Web sitesi için uygun bir menü sistemi seçin


Görünüm