MS-SQL Server 2000/2005'te UPDATE ve DELETE işlemlerinde eski kayıtlar LOG dosyasına kaydediliyor (Veritabanı Recovery Model SIMPLE dahi olsa).
"TRUNCATE TABLE XXX" komutu ile "DELETE FROM XXX" komutu sonuçta aynı işlemi yapıyor. Ama birincisi kayıtları LOG dosyasına kaydetmiyor ikincisi ise kaydediyor.
Bu işlemi 5-10 milyon kayıtlı bir tablo için yaptığınızda birincisi 0.1 saniye sürerken ikincisi 30 dakika sürebiliyor misal.
Kendilerince haklı gerekçeleri var bunun. Sonuçta veritabanının bozulmasını engellemek vs. deniyor.
UPDATE ve DELETE komutlarında LOG dosyasına kaydettirmemenin bir imkanı var mı?
Yani misal yukarda bahsettiğim DELETE komutunu da 0.1 saniyeye indirmenin bir yolu?
İyi çalışmalar.
UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme
Delete komutu için önerim mevcut tabloyu silip (silnmemek için isim değiştirme yoluna gidilebilir), aynı yapıda ve isimde diğer bir tablo oluşturman. Yani önce drop table ile silmek ve sonra da create table ile oluşturmak işlemi hızlandırabilir. Mesela
gibi bir tabloda milyonlarca kayıt olsun.Tablo
---------------------------
ID int (autoinc)
Aciklama char(10)
Kod: Tümünü seç
EXEC sp_rename 'Tablo', 'Tablo_silindi', 'OBJECT'-->tabloyu drop ile silmeden isim değiştirildi
CREATE TABLE dbo.Tablo
(
ID int NOT NULL IDENTITY (1, 1) NOT FOR REPLICATION,
Aciklama char(10) NULL
) ON [PRIMARY]
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme
"TRUNCATE TABLE" komutu zaten dediğiniz işlemi çok daha hızlı bir şekilde yapıyor.
Dediğiniz şekilde DROP ve CREATE ilişkisel veritabanlarında zaten çok zor. Zira ilişkisi olan bir sürü tablo vs. varken DROP yapamazsınız.
Benim kastım da zaten LOG dosyasına UPDATE ve DELETE komutlarında değişen/silinen eski kayıtların kaydedilmesini nasıl önleriz idi. Yani DELETE komutu illa dosyanın tamamını değilde şarta bağlı bir kısmını boşaltmak için kullanıldığını düşünün. Zaten tamamı silineceği zaman ben "TRUNCATE TABLE" komutunu kullanıyorum.
Internette epey yerli/yabancı forumda araştırdım.
Cevap bulamadım.
Belki bir yolu vardır diye araştırmaya devam ediyorum.
İyi çalışmalar.
Dediğiniz şekilde DROP ve CREATE ilişkisel veritabanlarında zaten çok zor. Zira ilişkisi olan bir sürü tablo vs. varken DROP yapamazsınız.
Benim kastım da zaten LOG dosyasına UPDATE ve DELETE komutlarında değişen/silinen eski kayıtların kaydedilmesini nasıl önleriz idi. Yani DELETE komutu illa dosyanın tamamını değilde şarta bağlı bir kısmını boşaltmak için kullanıldığını düşünün. Zaten tamamı silineceği zaman ben "TRUNCATE TABLE" komutunu kullanıyorum.
Internette epey yerli/yabancı forumda araştırdım.
Cevap bulamadım.
Belki bir yolu vardır diye araştırmaya devam ediyorum.
İyi çalışmalar.
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme
Merhabalar
Delphi 2005 için nasıl yapılır tam bilemiyorum fakat bundan birkaç yıl önce 2000 üzerinde
buna benzer birşeyi ben service kısımlarından yaptığımı hatırlıyorum. aklımda kaldığı kadarı ile log işlemlerini takip eden bir
service vardı bunu sql server her restart olduğunda kendisi açıyordu biraz bu tarafta araştırma yaparsan işini görebilir
Unutmadan bu servisler biraz tehlikeliydi çünkü işlemi dosya bazında yap gibi birşey yoktu .
bu servis kapatılınca sql server tüm log sistemini durduruyordu.
umarım aklımda kaldığı kadarı ile yardımcı olabilmişimdir.
Delphi 2005 için nasıl yapılır tam bilemiyorum fakat bundan birkaç yıl önce 2000 üzerinde
buna benzer birşeyi ben service kısımlarından yaptığımı hatırlıyorum. aklımda kaldığı kadarı ile log işlemlerini takip eden bir
service vardı bunu sql server her restart olduğunda kendisi açıyordu biraz bu tarafta araştırma yaparsan işini görebilir
Unutmadan bu servisler biraz tehlikeliydi çünkü işlemi dosya bazında yap gibi birşey yoktu .
bu servis kapatılınca sql server tüm log sistemini durduruyordu.
umarım aklımda kaldığı kadarı ile yardımcı olabilmişimdir.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana