Performansı etkilemeden büyük bir SQL Server veritabanını nasıl yedekleyebilirim?


18

Yavaş çalışan veya sabah erken zaman aşımına uğrayan sorguların raporlarını aldık ve çalıştığını gördüğüm tek işin veritabanı yedekleme işimiz olduğunu düşünüyorum.

Veritabanının kendisi yaklaşık 300 GB'dir ve yedekleme işi sabah 4: 30'da başlar ve sabah 7: 00'den biraz sonra bitmez. Yedekleme işimizin şu andaki sözdizimi:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ sunucuda hem veritabanlarını hem de veritabanı yedeklerini tutan bir bölümdür.

Ayrıca, bunun ayrı bir bağımsız sunucu değil, sanal bir sunucu olduğu da belirtilmelidir. Sanal sunucuya geçtikten hemen sonra yedekleme işlemi sırasında yavaşlamalarla ilgili şikayetler almaya başladık, bu yüzden ilgili olabileceğini düşünüyorum.

Sorgu performansını çalışırken etkilememesi için bu yedekleme işini çalıştırmanın bir yolu var mı?

SQL Server 2005 kullanıyoruz

Yanıtlar:


21
  1. Yedek G / Ç'yi sisteminizdeki G / Ç'nin geri kalanından ayırın. Daha uzun sürebilir ve hıçkırıklara daha eğilimli olsa da, yerel bir disk yerine ağ üzerinden yedekleme, örnek üzerindeki doğrudan etkinin hafifletilmesine yardımcı olabilir. Sanal bir makinede bile, SQL Server'ın farklı bir G / Ç alt sistemine yazabilmesi için diğer depolama alanlarını açığa çıkarmanız gerekir.
  2. Herhangi bir fark yaratma olasılığı düşüktür, ancak eğer bu bir işten kaynaklanıyorsa, seçeneği neden kullanmanız gerekir STATS? Eğer diğer seçenekleri gerektiğinden emin misiniz ( NOUNLOAD, NOSKIP, NOFORMAT)? Tüm seçenekler matrisinde kapsamlı bir performans testi yapmadım, ancak IMHO sadece ihtiyacınız olduğunu bildiğiniz seçenekleri kullanmalısınız.
  3. Tam yedeklemelerinizi, normal kullanıcı etkinliğini engellemeyen farklı bir zamanda çalıştırın. Bu her zaman mümkün değildir, ancak 7/24 operasyonlarda bile yoğun ve durgun zamanlar vardır.
  4. 2008+ sürümüne geçerseniz yedek sıkıştırmadan yararlanabilirsiniz (2008'de Enterprise, 2008 R2 +'da Enterprise). 2008'e geçemiyorsanız veya yeterli sürüme sahip değilseniz, sizin için sıkıştırma yapacak 3. taraf yedekleme araçları vardır ve hepsi de oldukça iyidir. 2008'den beri doğal sıkıştırma kullanabildim ve 3. tarafa daha fazla yatırım yapmaya gerek kalmadan hem hız hem de sıkıştırma% 'sinden oldukça memnun kaldım. Ancak 2005 ile Red-Gate SQL Backup ile iyi bir başarı elde ettiğimi hatırlıyorum ; Quest Lite Hızı de oldukça iyi, ancak Dell satın alımından bu yana ne tür bir çaba sarf edildiğini bilmiyorum.
  5. Veritabanlarınız tam olarak kurtarılıyorsa, tam yedeklemeler arasında daha uzun sürebilir, bu da zaman içinde bir noktaya kurtarma yapmanız gerekiyorsa, geri yüklemek için potansiyel olarak daha fazla günlükünüzün olacağı bilgisiyle ticaret yapabilirsiniz. Bu seçeneği Ali'nin hafta boyunca fark alma önerisiyle birleştirebilirsiniz - Perşembe günü iyileşmeniz gerekiyorsa, farktan bu yana 1 tam, 1 fark ve günlükleri geri yüklemeniz gerekir.
  6. Eski ve değişmeyen çok fazla veriniz varsa, bunu farklı bir kurtarma planına sahip farklı bir veritabanında veya en azından farklı dosya gruplarında barındırmayı ve yedekleme işlemlerinizi bu şekilde bölmeyi düşünebilirsiniz. Salt okunur hale getirilebilecek referans veya arşiv verileriniz varsa ve basit bir kurtarma işlemindeyseniz, kendi salt okunur dosya grubuna taşıyabilir, bir kez yedekleyebilir ve gece yedeklemelerinize dahil etmek zorunda kalmazsınız asla. Şu MSDN konularına bakın:

Parça parça restorasyonlar yapılması

Örnek: Yalnızca Bazı Dosya Gruplarının Parça parça Geri Yüklemesi (Basit Kurtarma Modeli)


Yedek G / Ç'yi sistemdeki G / Ç'nin geri kalanından ayırma hakkında daha fazla bilgi edinmek için beni doğru yöne yönlendirebilir misiniz? # 3 (yedekleme zamanını değiştirme) bir seçenek değil, çünkü 04:30 yedeklemeyi çalıştırmak için en iyi zaman ve 2008'e yükseltme hakkında konuştuk (# 4), ancak bunun olacağını düşünmüyorum yakın zamanda.
Rachel

Sizi doğru yöne nasıl yönlendireceğinizden emin değilsiniz - diğer depolama alanını sanal makineye maruz bırakabilir misiniz?
Aaron Bertrand

Evet, sanırım başka bir depolama alanını sanal makineye maruz bırakabiliriz. "Yedek G / Ç'yi sistemdeki G / Ç'nin geri kalanından ayırma" dediğinde, disk sürücüsü yerine bir ağ sürücüsüne yedekleme yapmayı mı kastediyorsunuz?
Rachel

3
Hayır, aynı zamanda normal veritabanı ve tempdb etkinliği için aynı anda okuma ve yazma işlemi yaptığınız disk dışında başka bir G / Ç alt sistemine yedeklemeyi kastediyorum . Bu, aynı sunucuda farklı bir disk sürücüsü, başka bir makinede bir paylaşım, SAN'da farklı bir LUN, bir NAS'ta bir paylaşım vb.
Olabilir

I Parçalı geri yükleme, düşünmediğim harika bir çözüm, gönderdiğiniz için teşekkürler!
Ali Razeghi

8

Bu yaygın bir sorundur, birden fazla çözüm vardır ve gerçekten ortamınıza bağlıdır. Hadi bunlardan geçelim:

1- Yedekleme Sıkıştırma Anında

2008'de R1 Yedek Sıkıştırma Enterprise'da, 2008'de R2 Yedekleme Standardında kullanıma sunuldu. Bu cok büyük. Bu size çok zaman kazandıracak. Yükseltmek için giderseniz. Eğer kontrol edemiyorsanız REDGATE en HyperBak programını veya Görev LiteSpeed . Her ikisinin de ücretsiz bir deneme sürümü var.

2- Tam ve Farklı Yedeklemeler

Çalıştığım 7/24 büyük bir internet şirketi için çok fazla zaman aşımına neden olan 2 TB'lık bir veritabanı veritabanını devralmıştım. Bize çok zaman kazandıran tam ve farklı yedeklemeleri etkinleştirdik. 12:00 Pazar günü etkinlik düşükken tam bir yedek alırdım ve hafta boyunca farkları alırdım. Bu çok yer kazandı. Diff'in hangi veritabanı sayfalarının değiştirildiği üzerinde çalışırken işlem günlüklerinden farklı çalışması. Değiştirilen sayfalar yedeklenir. Böylece tam bir geri yükleme yaparsınız, daha sonra değiştirilen sayfaları eklemek için diff geri yükleme yaparsınız.

3- Darboğazınız Nedir?

Darboğaz analizi teşhis için önemlidir. Veri dosyalarınızla aynı disk dizisine mi yedekliyorsunuz? Veri dosyalarınız sabitleniyor mu? Yedeklemeler sırasında veri diskleri için DISK SEC / READ ve DISK SEC / WRITE nedir? Yedekleri 4 dosya oluşturacak şekilde değiştirdim. Her dosyanın kendi iş parçacığı yazarı vardır ve SAN'ımızda harika çalıştı. Test edin, sadece 4 yedek dosya oluşturarak 45 dakika traş ettim. Yukarıda listelenen disk metriklerinizin düşük olduğundan emin olun. Bir taban çizgisi alın.

4- Farklı Bir Sunucuya Çoğaltma ve Yedekleme

Bu biraz gelişmiş. Çoğaltılmış veritabanınızın güncel olduğundan emin olmanız ve bunun için doğru izlemeye ihtiyacınız vardır. Eğer öyleyse, çoğaltılan veritabanını yedekleyebilirsiniz.


Sadece HyperBak'a bir kafa, 2011'in sonlarında test ettiğimde VLDB'lerde kazanç sağlamamıştım. RedGate ile konuştum ve bir hata olduğunu söylediler, umarım şimdiye kadar çözüldü. 300GB'ın VLDB olarak kabul edileceğini sanmıyorum ama beklendiği gibi çalışmazsa dikkat edin.
Ali Razeghi

-1

Bu parametreleri kullanabilirsiniz:

BLOKLAR BOYUTU - 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 Boyutunu seçin. (KB cinsinden)

BUFFERCOUNT - Yedekleme işlemi için kullanılacak toplam G / Ç arabellek sayısını belirtir. Herhangi bir pozitif tam sayı belirtebilirsiniz; ancak, çok sayıda arabellek Sqlservr.exe işlemindeki sanal adres alanı yetersiz olduğundan "bellek yetersiz" hatalarına neden olabilir. - MSDN'den

MAXTRNASFERSIZE - 65536 bayttan (64 KB) 4194304 bayta (4 MB) kadar


-3

Dene. büyük boyutlu db süre aşımı süresi sorunu çözüldü.

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub

3
Zaman aşımının 500 ms olarak ayarlanmasının zaman aşımı süresi dolduğu sorununu çözeceğini düşünmüyorum.
05
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.