Aracılığıyla paylaş


SQL Server'da döküm dosyası oluşturmak için Sqldumper.exe aracını kullanma

Bu makalede, SQL Server'da bulunan Sqldumper.exe aracı için genel yönergeler sağlanır. Bu araç, farklı türde döküm dosyaları oluşturmak için kullanılır.

Özgün ürün sürümü: SQL Server 2019, SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL Server 2008, SQL Server 2005
Özgün KB numarası: 917825

Özet

Sqldumper.exe aracı Microsoft SQL Server'a dahildir. Hata ayıklama için SQL Server'ın bellek dökümü dosyalarını ve ilgili işlemleri oluşturur. Bu makalede, Watson hata raporlama veya hata ayıklama görevleri için döküm dosyası oluşturmak üzere Sqldumper.exe nasıl kullanılacağı açıklanmaktadır.

Makalede döküm dosyaları oluşturmak için iki yöntem daha açıklanmaktadır:

  • Ekli PowerShell betiği , SQLDumper.exe komut satırı seçeneklerini otomatikleştirir.
  • DBCC STACKDUMP Transact-SQL (T-SQL) komutu SQL Server'da döküm dosyası oluşturmak için kullanılabilir.

Sqldumper.exe el ile çalıştırma

Sqldumper.exe aracını SQL Server'ın ilk olarak yüklediği klasörün bağlamı altında çalıştırın.

Varsayılan olarak, Sqldumper.exe yükleme yolu SQLServerInstall Drive:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe şeklindedir<.> SQLServerInstall Sürücüsünün<>, SQL Server'ı yüklediğiniz sürücü için bir yer tutucu olduğuna dikkat edin.

Sqldumper.exe aracını kullanarak döküm dosyası oluşturmak için şu adımları izleyin:

  1. SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\number>\<Shared klasörünü açın<.

    Bu klasör yolunda, <sayı> aşağıdaki sürümlerden biri için bir yer tutucudur:

    • SQL Server 2019 için 150
    • SQL Server 2017 için 140
    • SQL Server 2016 için 130
    • SQL Server 2014 için 120
    • SQL Server 2012 için 110
    • SQL Server 2008 için 100
    • SQL Server 2005 için 90
  2. Dbghelp.dll dosyasının bu klasörde olduğundan emin olun.

  3. Çalıştırmayı Başlat'ı>seçin, cmd yazın ve tamam'ı seçin.

  4. Komut isteminde aşağıdaki komutu yazın ve Enter tuşuna basın:

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    

    Not

    Bu klasör yolunda, sayı>, <daha önce açıklandığı gibi SQL Server sürümüyle değişen yer tutucuyla aynıdır.

  5. Belirli bir döküm dosyası türü oluşturmak için komut istemine karşılık gelen komutu yazın ve Enter tuşuna basın:

    • Tam döküm dosyası:

      Sqldumper.exe <ProcessID> 0 0x01100
      
    • Mini döküm dosyası:

      Sqldumper.exe <ProcessID> 0 0x0120
      
    • Dolaylı olarak başvurulan bellek içeren mini döküm dosyası (bu önerilen seçenektir ve otomatik bellek dökümü dosyaları oluşturduğunda varsayılan olarak SQL Server tarafından da kullanılır):

      Sqldumper.exe <ProcessID> 0 0x0128
      
    • Filtrelenmiş döküm dosyası:

      Sqldumper.exe <ProcessID> 0 0x8100
      

    Not

    <ProcessID> , döküm dosyası oluşturmak istediğiniz Windows uygulamasının işlem tanımlayıcısı için bir yer tutucudur.

Sqldumper.exe başarıyla çalıştırılırsa araç, aracın yüklü olduğu klasörde bir döküm dosyası oluşturur.

Sqldumper.exe oluşturulan döküm dosyasının, SQLDmpr<xxxx.mdmp'ye> benzeyen bir dosya adı deseni vardır.

Bu düzende xxxx>, <aynı klasörde benzer bir dosya adına sahip diğer dosyalara göre belirlenen artan bir sayıdır. Klasörde belirtilen desenle eşleşen dosyalar varsa, istediğiniz dosyayı bulmak için oluşturma tarihlerini ve saatlerini karşılaştırmayı göz önünde bulundurun.

Microsoft Windows uygulama işlemi tanımlayıcısı alma

Sqldumper.exe aracını kullanarak döküm dosyası oluşturmak için, döküm dosyası oluşturmak istediğiniz Windows uygulamasının işlem tanımlayıcısına sahip olmanız gerekir. İşlem tanımlayıcısını şu şekilde edinebilirsiniz:

  1. Ctrl+Alt+Delete tuşlarına basın ve Görev Yöneticisi'ne tıklayın.
  2. Windows Görev Yöneticisi iletişim kutusunda İşlemler sekmesini seçin.
  3. Görünüm menüsünde Sütunları Seç'i seçin.
  4. Sütunları Seç iletişim kutusunda PID (İşlem Tanımlayıcısı) onay kutusunu ve ardından Tamam'ı seçin.
  5. Döküm dosyası oluşturmak istediğiniz Windows uygulamasının işlem tanımlayıcısına dikkat edin. SQL Server uygulaması için Sqlservr.exe işleminin işlem tanımlayıcısını not edin.
  6. Görev Yöneticisi’ni kapatın.

Alternatif olarak, bilgisayarınızda çalışan SQL Server uygulamasının işlem tanımlayıcısını almak için SQL Server hata günlüğü dosyasını kullanın. SQL Server hata günlüğü dosyasının bir bölümü aşağıdaki örneğe benzer:

2021-09-15 11:50:32.690 Server       Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64)
    Jul 19 2021 15:37:34
    Copyright (C) 2019 Microsoft Corporation
    Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19043: ) (Hypervisor)
2021-09-15 11:50:32.690 Server       UTC adjustment: -5:00
2021-09-15 11:50:32.690 Server       (c) Microsoft Corporation.
2021-09-15 11:50:32.690 Server       All rights reserved.
2021-09-15 11:50:32.690 Server       Server process ID is 7028.

Sonra görüntülenen Server process ID sayı, Sqlservr.exe işleminin işlem tanımlayıcısıdır.

Bellek dökümü dosyaları için çıkış yolu

SQLDumper.exe öncelikle özel durumlar, onaylar veya verimsiz zamanlayıcılar gibi belirli sorunları çözmek için bir bellek dökümü gerektiğinde SQL Server işlemi için bellek dökümü dosyaları oluşturur. Bu gibi durumlarda SQL Server, işleminin bellek dökümü dosyasını oluşturmak için SQLDumper.exe çağırır. Varsayılan olarak, bellek dökümü dosyası SQL örneği MSSQL\LOG\ dizininde depolanır.

Varsayılan yolu değiştirme

Örneğin döküm dosyası boyutu çok büyükse, şu adımları izleyerek yolu değiştirebilirsiniz:

  1. SQL Server Yapılandırma Yöneticisi açın.
  2. SQL Server Hizmetleri'nin altında, araştırma aşamasında olan SQL Server örneğini bulun.
  3. Bu girdiye sağ tıklayın, Özellikler'i seçin ve Gelişmiş sekmesine gidin.
  4. Döküm Dizini'ni istediğiniz yola dönüştürüp Tamam'ı seçin.
  5. Yeni ayarın etkili olması için SQL Server'ı (mümkün olduğunda) yeniden başlatın.

Sqldumper.exe aracı herhangi bir Windows uygulaması için döküm dosyası oluşturmak üzere el ile kullanıldığında, döküm dosyası Windows uygulamasının şu anda kullandığı bellek kadar büyük olabilir. Sqldumper.exe döküm dosyasını yazdığı sürücüde yeterli disk alanı olduğundan emin olun.

Komutta özel bir çıkış klasörü belirtin

Sqldumper.exe aracının döküm dosyasını yazmasını istediğiniz dizini belirtebilirsiniz. Sqldumper.exe çalıştırmadan önce dizinin zaten mevcut olması gerekir. Aksi takdirde, Sqldumper.exe başarısız olur. Döküm dosyası için konum olarak UNC (Evrensel Adlandırma Kuralı) yolu kullanmayın. Aşağıdaki adımlar, mini döküm dosyasının konumunun nasıl belirtileceğini gösteren bir örnek sağlar:

  1. Çalıştırmayı Başlat'ı>seçin, cmd yazın ve tamam'ı seçin.

  2. Komut isteminde aşağıdaki komutu yazın ve Enter tuşuna basın:

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    
  3. Komut isteminde aşağıdaki komutu yazın ve Enter tuşuna basın:

    Sqldumper.exe ProcessID 0 0x0128 0 <MdumpPath>
    

    Not

    <MdumpPath> , Sqldumper.exe aracının döküm dosyasını yazmasını istediğiniz dizin için bir yer tutucudur. Varsayılan olarak, dosya geçerli klasöre yazılır.

Oluşturulacak bir tam döküm dosyası veya filtrelenmiş döküm dosyası belirtirseniz, Sqldumper.exe döküm dosyasının oluşturulması birkaç dakika sürebilir. Geçen süre aşağıdaki değişkenlere bağlıdır:

  • Sqlservr.exe şu anda kullandığı bellek miktarı.
  • Döküm dosyasını depolamak için araç tarafından kullanılan sürücünün yazma hızı.

Bu süre boyunca Sqldumper.exe aracı komutları işlemez. Sunucunun yanıt vermeyi durdurduğunu göreceksiniz. Ayrıca, küme yük devretmesi oluşabilir.

İzin gereksinimleri

Sqldumper.exe çalıştırmak için aşağıdaki yöntemlerden birini kullanarak Windows'ta oturum açmanız gerekir:

  • Bilgisayardaki yönetici grubunun üyesi olan bir hesap kullanın.
  • SQL Server hizmetinin çalıştığı kullanıcı hesabını kullanın.

Sqldumper.exe aracının Uzak Masaüstü veya Terminal Hizmetleri aracılığıyla başarıyla çalışması için Uzak Masaüstü veya Terminal Hizmetleri'ni konsol modunda başlatmanız gerekir. Örneğin, Uzak Masaüstü'nü konsol modunda başlatmak için Çalıştırmayı Başlat'ı>seçin, mstsc /console yazın ve tamam'ı seçin. Hedef sunucu Windows 2000 çalıştırıyorsa , /console seçeneği sessizce yoksayılır. Uzak Masaüstü aracılığıyla sunucuya bağlanabilirsiniz, ancak konsol oturumunu kullanmayacaksınız.

Sqldumper.exe çalıştırdıktan sonra geçerli klasörde döküm dosyası oluşturulmadığını fark ederseniz, hatanın olası nedenini belirlemek için araç tarafından oluşturulan komut satırı çıkışını denetleyin. Bu bilgiler geçerli dizindeki Sqldumper_errorlog.log dosyasına da kaydedilir. İki olası hata iletisi ve bunların nedenleri şunlardır:

İleti Neden
"OpenProcess başarısız 0x57 - Parametre yanlış" Sqldumper.exe yardımcı programı için geçersiz bir İşlem Kimliği geçirildi.
"İş parçacığı kimliği için geçersiz değer - <geçersiz parametre Parametre> hatası" Sqldumper.exe yardımcı programı için geçersiz bir parametre geçirildi.

Aşağıdakilerden birine benzer bir hata iletisi oluşturulursa, bu iletiyi güvenle yoksayabilirsiniz:

  • "Minidump 6 sırasında bilinmeyen geri çağırma türü"
  • "Minidump 7 sırasında bilinmeyen geri çağırma türü"

Döküm oluşturmanın etkisi

Kullanıcı modu işleminin döküm dosyası istendiğinde (bu makalede açıklandığı gibi, kapsamımızın dışında olan İşletim Sistemi Çekirdek Dökümleri yerine), döküm içeriğini dosya hedefine seri hale getirmek için gereken süre boyunca hedef İşlem (burada SQLServer.exe) dondurulur.

Donduruldu, işlemin Windows Kümelemesi'nin IsAlive ve Canlı Görünüyor uygulaması gibi herhangi bir Kaynak Yoklama mekanizması da dahil olmak üzere herhangi bir kullanıcı isteğini veya herhangi bir iç işlemi çalıştıramayacağı anlamına gelir (bu durumun nasıl ele alınacağı hakkında ayrıntılı bilgi için küme yük devretmelerindeki bellek dökümleri bölümüne bakın). Duvar saati zamanına bağlı olan herhangi bir zaman aşımı, donma nedeniyle de ihlal edilebilir.

Önceki ifadeye bağlı olarak, donma süresi buradaki kritik faktördür ve aşağıdakiler tarafından yönlendirilir:

  • Seçilen döküm türü.
  • Varsayılan parametreleri çalıştıran tek bir etkin örnek söz konusu olduğunda genellikle sunucunun toplam fiziksel RAM'ine yakın olan bellekteki SQL Server işleminin boyutu.
  • Döküm için hedef olarak kullanılan diskin performansı.

Ayrıca, disk üzerindeki döküm dosyasının boyutu, özellikle birden çok döküm olasılığı varsa ve büyük, varsayılan olmayan döküm türleri seçilirse planlanmalıdır. Ne bekleyebileceğinizi öğrenmek için Döküm türlerini gözden geçirdiğinizden emin olun. Varsayılan olarak, bazı döküm yöntemleri dökümü SQL Server Örneğinin \Log klasöründe oluşturur. Bu, varsayılan olarak basit yapılandırmada SQL Server için sistem diski ve veri+günlük diski de olabilir. Bu diski doygunluğa getirmek SQL Server ve/veya sistem kullanılabilirliği üzerinde ciddi etkiye sahiptir.

Kümelenmiş sistemler üzerindeki etkiyi yönetme

Döküm oluşturma sırasında işlem geçici olarak askıya alınır. Bu, SQL Server hizmetinin kullanılabilirliğini etkileyebilir ve Her Zaman Açık bağlamlarında (yük devretme kümesi örneği ve Kullanılabilirlik grubu) kaynakların yük devretmesini tetikleyebilir. Farklı işlemlerin döküm oluşturması kaynakları farklı etkiler. Döküm oluşturma ve Döküm türleri bölümlerinin etkisi bölümünü dikkatle okuyun.

Yük devretme kümelenmiş örneğinde veya SQL Server'ın kullanılabilirlik grubu (AG) örneğinde SQL Server dökümünü yakaladığınızda, döküm işleminin tamamlanması çok uzun sürerse kümelenmiş SQL Server veya AG başka bir düğüme yük devredebilir. Bu durum özellikle büyük miktarda RAM kullanan sistemlerde veya filtrelenmiş veya tam bellek dökümü oluşturuyorsanız sorun olabilir. Yük devretmeyi önlemek için döküm dosyasını yakalamadan önce aşağıdaki ayarları kullanın. Döküm dosyası alındıktan sonra değişiklik geri alınabilir:

  • Yük devretme kümelenmiş örneği (FCI) için:
    • Küme Yöneticisi'nde SQL Server kaynağına sağ tıklayın, İlkeler sekmesinde Kaynak başarısız olursa yeniden başlatma'yı seçin.
    • Özellikler sekmesinde HealthCheck Zaman Aşımı'nı artırın. Örneğin, özellik değerini 180 saniye veya daha yüksek bir değere ayarlayın. Bu zaman aşımına ulaşılırsa, kaynak başarısız olursa, yeniden başlatılmıyor ilkesi yoksayılır ve kaynak yeniden başlatılır.
    • Özellikler sekmesinde FailureConditionLevel değerini sıfır olarak değiştirin.
  • AG için aşağıdaki tüm ayarları uygulayın:
    • Tüm çoğaltmalar için oturum zaman aşımını 120 saniye artırın. SQL Server Management Studio'da (SSMS), yapılandırılacak çoğaltmaya sağ tıklayın ve özellikler'i seçin. Oturum zaman aşımı (saniye) alanını 120 saniye olarak değiştirin. Daha fazla bilgi için bkz . Kullanılabilirlik Çoğaltması (SQL Server) için Oturum Zaman Aşımı Süresini Değiştirme.
    • Tüm çoğaltmaların otomatik yük devretmesini el ile yük devretme olarak değiştirin. SSMS'de çoğaltmaya sağ tıklayın, Özellikler'i seçin ve Özellikler sekmesinde tüm çoğaltmaların otomatik yük devretmesini el ile yük devretme olarak değiştirin. Daha fazla bilgi için bkz. Kullanılabilirlik Çoğaltmasının (SQL Server) Yük Devretme Modunu Değiştirme.
    • LeaseTimeout değerini 60.000 ms (60 saniye) olarak artırın ve HealthCheckTimeout değerini 90.000 ms (90 saniye) olarak değiştirin. Küme Yöneticisi'nde AG kaynağı'na sağ tıklayın, Özellikler'i seçin ve her iki ayarı da değiştirmek için Özellikler sekmesine geçin. Daha fazla bilgi için bkz . HealthCheckTimeout Özellik Ayarlarını Yapılandırma.

SQL Server üzerindeki etkiyi azaltmak için ürün geliştirmeleri

Döküm dosyasının boyutunu ve/veya bellek dökümünü oluşturma süresini azaltmak için SQL Server'ın son sürümlerine dört önemli geliştirme eklenir:

Bit eşlem filtreleme mekanizması

SQL Server, filtrelenmiş dökümden dışlanacak bellek sayfalarını izleyen bir bit eşlem ayırır. Sqldumper.exe bit eşlemi okur ve diğer bellek yöneticisi meta verilerini okumaya gerek kalmadan sayfaları filtreler. Bit eşlem sırasıyla etkinleştirildiğinde veya devre dışı bırakıldığında SQL Server hata günlüğünde aşağıdaki iletileri görürsünüz:

Page exclusion bitmap is enabled. ve Page exclusion bitmap is disabled.

  • SQL Server 2016

    SQL Server 2016 SP2 CU13'den başlayarak bit eşlem filtrelemesi varsayılan olarak etkindir.

  • SQL Server 2017

    • Bu, CU15 aracılığıyla RTM'de kullanılamaz.
    • SQL Server 2017 CU16'da, T8089 aracılığıyla bit eşlem filtrelemeyi etkinleştirebilir ve T8089'ı kapatarak devre dışı bırakabilirsiniz.
    • SQL Server 2017 CU20'den başlayarak bit eşlem filtrelemesi varsayılan olarak etkindir. İzleme bayrağı T8089 artık uygulanmaz ve açıksa yoksayılır. Bit eşlem filtrelemesi T8095 aracılığıyla devre dışı bırakılabilir.
  • SQL Server 2019

    Bu, SQL Server 2019 RTM'de varsayılan olarak etkindir. T8095 aracılığıyla devre dışı bırakılabilir.

Aynı sorundaki yinelenen dökümlerin ortadan kaldırılması

Aynı sorundaki yinelenen bellek dökümleri ortadan kaldırılır. Sql altyapısı, yığın imzası kullanarak bir özel durumun oluşup oluşmadığını izler ve zaten varsa yeni bir bellek dökümü oluşturmaz. Bu, erişim ihlalleri, yığın taşması, onaylar ve dizin bozulması özel durumları için geçerlidir. Bu, bellek dökümleri tarafından kullanılan disk alanı miktarını önemli ölçüde azaltır ve döküm oluşturmak için işlemi geçici olarak dondurmaz. Bu, SQL Server 2019'a eklendi.

Hata günlüğünde kısaltılmış çıkış

SQL Server hata günlüğünde tek bir bellek dökümüyle oluşturulan içerik çok zor olmakla kalmaz, aynı zamanda tüm bu bilgileri hata günlüğünde bir metin biçiminde seri hale getirmek için gereken süre nedeniyle bellek dökümü oluşturma işlemini de yavaşlatabilir. SQL Server 2019'da döküm oluşturma işleminde Hata günlüğünde depolanan içerik büyük ölçüde azaltılmıştır ve şöyle görünebilir:

DateTimespidS pid    **Dump thread - spid = 0, EC = 0x0000015C7169BF40
DateTimespidS pid    *
DateTimespidS pid    *User initiated stack dump. This is not a server exception dump.
DateTimespidS pid    *
DateTimespidS pid    Stack Signature for the dump is 0x00000000788399E5
DateTimespidS pid    External dump process return code 0x20000001.
External dump process returned no errors.

Daha önce SQL Server, kullanıcı tarafından el ile döküm tetiklendiğinde her oturum veya iş parçacığı için bilgileri yazdırıyordu.

Bellek dökümlerinin paralel sıkıştırması

Dökümleri daha hızlı oluşturmak ve boyutunu küçültmek için SQL Server 2022 CU8 ve SQL Server 2019 CU23'te sıkıştırılmış bellek dökümü özelliği kullanıma sunulmuştur. Etkinleştirildiğinde, Sqldumper.exe bir işlemin belleğini aynı anda okumak için birden çok iş parçacığı oluşturur, sıkıştırır ve sonra döküm dosyasına kaydeder. Bu çok iş parçacığılı paralel sıkıştırma, tam ve filtrelenmiş dökümlerle kullanıldığında dosya boyutunu küçültür ve döküm işlemini hızlandırır.

Sıkıştırılmış bellek dökümünü etkinleştirmek için izleme bayrağı 2610'u açabilirsiniz:

DBCC TRACEON (2610,-1)
GO
DBCC STACKDUMP with FILTERED_DUMP
GO
DBCC TRACEOFF (2610,-1)

Alternatif olarak, SQL Server örneğinize her zaman sıkıştırılmış bellek dökümleri oluşturması için başlangıç parametresi olarak ekleyebilirsiniz -T2610 .

Sqldumper.exe el ile çalıştırırsanız, sıkıştırılmış bellek dökümünü yakalamak için parametresini -zdmp kullanabilirsiniz. Örneğin:

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp

Ayrıca, Sqldumper.exe sıkıştırılmış dökümü oluşturmak için kullanabileceği çekirdek sayısını sınırlamak için parametresini -cpu:X kullanabilirsiniz; burada X , CPU sayısıdır. Bu parametre yalnızca komut satırından Sqldumper.exe el ile çalıştırdığınızda kullanılabilir:

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp -cpu:8

Bellek dökümlerinin oluşturulmasını engelleyen veya geciktiren faktörler

Aşağıdaki faktörlerin gecikmelere neden olduğu veya bellek dökümlerinin oluşturulmasını önlediği bilinmektedir.

  • Bellek dökümlerinin yazıldığı GÇ yolu kötü performans gösterir. Böyle durumlarda, disk G/Ç performansını araştırmak ve çözümlemek bir sonraki mantıksal adımdır.
  • Virüsten koruma veya başka bir izleme yazılımı SQLDumper.exe engelliyor. Bazı durumlarda, üçüncü taraf yazılım ReadProcessMemory işlevinin sapmasını sağlar . Bu, döküm süresini önemli ölçüde artırabilir. Bu sorunların çoğunu çözmek için, engelleyici yazılımı devre dışı bırakın veya dışlama listesine SQLDumper.exe ekleyin.

Döküm türleri

Aşağıdaki yöntemler üç farklı tür döküm oluşturmak için kullanılabilir: mini dökümler, tam dökümler ve filtrelenmiş dökümler.

Başvuruda bulunan belleğe sahip mini dökümler

Bu bellek dökümü türü, işlemin tüm etkin iş parçacıklarının ("iş parçacığı yığınları") anlık görüntüsü ve iş parçacığı yığınları ve diğer bazı anahtar işlemi veya iş parçacığı verileri tarafından başvurulan belleğin sınırlı bir ayıklamasıdır. Genellikle boyutu birkaç megabayttır ve oluşturması hızlıdır (bir saniyeden birkaç saniyeye kadar). Daha büyük sunucu sistemleri bile (SQL Server işleminde dolaylı olarak çok sayıda iş parçacığını yönlendiren yüzlerce CPU ile), nadiren 20-30 MB'ı aşar: mini döküm boyutu SQL Server işleminin boyutuyla birlikte büyümez. Bu döküm türü özel durumlarda, zamanlayıcı sorunlarında, mandal sorunlarında, veritabanı bozulmasında ve onaylarda otomatik olarak bellek dökümleri oluştururken SQL Server tarafından kullanılan varsayılan türdür.

Not

SQL Server, yerleşik izlemesinin bir parçası olarak bazı durumlarda otomatik "tanılama mini dökümleri" oluşturur. Bu nedenle bu işlem, SQL Server'ın gerektiğinde otomatik olarak tetikleyebileceği kadar güvenli kabul edilir.

Tam dökümler

Tam bellek dökümü, etkin hedef işlem alanının tam bir kopyasıdır. Bu nedenle tüm iş parçacığı durumunu, tüm işlem ayrılmış belleğini ve tüm yüklenen modülleri içerir. Bu nedenle tam dökümler, yaklaşık olarak SQL Server işlemiyle aynı olan bir boyuta sahip olur ve bu da neredeyse toplam sistem RAM'i kadar büyük olabilir. Birkaç yüzlerce gigabayt veya daha fazla dosya anlamına gelen tek bir SQL Server örneğine ayrılmış büyük sunucularda. Söylemeye gerek yok, böyle bir dosyanın oluşturulması uzun zaman alacak ve bu nedenle uzun süreli donmaya neden olacak. Döküm dosya hedefi için disk performansı, donma süresini önemli ölçüde etkiler. Bu tür döküm, aşağıdaki açıklamalarda açıklandığı gibi günümüzde SQL Server için nadiren kullanılmaktadır.

Filtrelenmiş dökümler

SQL Server çalıştıran tipik sunucuların RAM boyutu sürekli arttıkça, tam dökümler daha karmaşık hale gelir. Bu nedenle filtrelenmiş dökümler uygulanır. Filtrelenmiş döküm, SQL Server belleğinin büyük alanlarının anında dışlandığı ve diske yazılmadığı tam döküm alt kümesidir. Genellikle dışlanan bellek, sorun gidermeye ek değer getirmez. Veri/dizin sayfaları ve Hekaton veri sayfaları ve Günlük Havuzu belleği gibi bazı iç önbellekler örnek olarak verilebilir. Bu filtrelenmiş döküm, tam dökümden daha küçük bir dosyayla sonuçlanır, ancak döküm yine de neredeyse tüm yararlılığını korur. Filtrelenmiş dökümler, mini dökümlerin yeterli olmadığı durumlarda tercih edilen seçenek olarak tam dökümlerin yerini aldı. Boyutun azalması tam döküme göre farklılık gösterebilir, ancak yine de sql Server işlem boyutunun yüzde 30-60'ı olan oldukça büyük bir dosyadır. Bu nedenle, iyi bir güvenlik marjı bırakan en kötü seçenek olarak tam döküm kadar büyük bir olası boyut planlamak en iyisidir. Filtrelenmiş döküm her durumda tam döküm oluşturmaktan daha hızlı olmayabilir: Önlenen GÇ sayısıyla ilgili kazançların filtre mantığını uygulamak için gereken süreyi aşıp aşmadığı önemlidir (disk hızı ve CPU/RAM hızı bunu etkiler).

Filtrelenmiş döküm boyutunun kabaca tahminini almak için aşağıdaki sorguyu kullanabilirsiniz. Veri veya dizin sayfalarının çoğunun dökümden dışlanması beklense de, yalnızca mandallı olan ve değiştirilenler atlanmayacaktır.

SELECT SUM(pages_kb)
FROM sys.dm_os_memory_clerks
WHERE type != 'MEMORYCLERK_SQLBUFFERPOOL'

herhangi bir Microsoft Windows uygulaması için isteğe bağlı döküm dosyası oluşturmak üzere Sqldumper.exe kullanabileceğiniz için filtrelenmiş döküm seçeneğini kullanmayı düşünebilirsiniz. Ancak, filtrelenmiş döküm dosyası yalnızca SQL Server bağlamında uygulanabilir ve anlamlıdır. Yine de bir mini döküm, tam döküm dosyası veya SQL Server dışı uygulamaları başarıyla oluşturabilirsiniz.

SQL Server işlemi, işlem herhangi bir özel durumla karşılaştığında döküm dosyası oluşturmak için Sqldumper.exe aracını dahili olarak çağırır. SQL Server parametreleri Sqldumper.exe geçirir. Bir özel durum veya onay oluştuğunda SQL Server'ın varsayılan olarak araca geçirdiği parametreleri değiştirmek için izleme bayraklarını kullanabilirsiniz. Bu izleme bayrakları 2540 ile 2559 arasında yer alır. Oluşturmak SQLDumper.exe varsayılan döküm türünü değiştirmek için bu izleme bayraklarından birini kullanabilirsiniz (varsayılan, başvurulan belleğe sahip bir mini dökümdür). Örneğin:

  • İzleme Bayrağı 2551: Filtrelenmiş bir bellek dökümü oluşturur.
  • İzleme Bayrağı 2544: Tam bellek dökümü oluşturur.
  • İzleme Bayrağı 8026: SQL Server döküm bir kez oluşturulduktan sonra döküm tetikleyicisini temizler.

İki veya daha fazla izleme bayrağı etkinse, en büyük bellek dökümünü gösteren seçenek kabul edilir. Örneğin, izleme bayrakları 2551 ve 2544 kullanılırsa, SQL Server tam bellek dökümü oluşturur.

Küme yük devretmelerinde bellek dökümü oluşturma

Küme yük devretme senaryolarında SQL Server kaynak DLL'i, sorun gidermeye yardımcı olmak için yük devretme gerçekleşmeden önce bir döküm dosyası alabilir. SQL Server kaynak DLL'i bir SQL Server kaynağının başarısız olduğunu belirlediğinde, SQL Server kaynak DLL'i SQL Server işleminin döküm dosyasını almak için Sqldumper.exe yardımcı programını kullanır. Sqldumper.exe aracının döküm dosyasını başarıyla oluşturduğundan emin olmak için aşağıdaki üç özelliği önkoşul olarak ayarlamanız gerekir:

  • SqlDumperDumpTimeOut

    Kullanıcı tarafından belirtilen zaman aşımı. Kaynak DLL, kaynak DLL SQL Server hizmetini durdurmadan önce döküm dosyasının tamamlanmasını bekler.

  • SqlDumperDumpPath

    Sqldumper.exe aracının döküm dosyasını oluşturduğu konum.

  • SqlDumperDumpFlags

    Sqldumper.exe tarafından kullanılan bayraklar.

Özelliklerden herhangi biri ayarlı değilse, Sqldumper.exe döküm dosyasını oluşturamaz. Kaynak her çevrimiçi duruma getirildiğinde hem olay günlüğüne hem de küme günlüğüne bir uyarı iletisi kaydedilir.

SQL Server 2012 ve sonraki sürümlerde SQLDumper için küme yapılandırması

Bu özellikleri değiştirmek için (T-SQL) komutunu kullanabilirsiniz ALTER SERVER CONFIGURATION . Örneğin:

ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpTimeOut = 0;
ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpPath = 'C:\temp\';
ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpFlags = 296;

Alternatif olarak, PowerShell betiklerini de kullanabilirsiniz. Örneğin, adlandırılmış örnek için SQL2017AG:

Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpPath" -Value "C:\temp"
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpFlags" -Value 296
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpTimeOut" -Value 0

Ayarların uygulanıp uygulanmadiğini denetlemek için aşağıdaki PowerShell komutunu çalıştırabilirsiniz:

Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Get-ClusterParameter

SQL Server 2008/2008 R2 veya Windows 2012 ve önceki sürümlerde SQLDumper için küme yapılandırması

Küme kaynak komutunu kullanarak küme yük devretmesi için Sqldumper.exe yardımcı programı özelliklerini ayarlamak için şu adımları izleyin:

  1. Çalıştırmayı Başlat'ı>seçin, cmd yazın ve tamam'ı seçin.
  2. Her özellik için komut istemine karşılık gelen komutu yazın ve Enter tuşuna basın:
    • özelliği SqlDumperDumpFlags

      Belirli bir döküm dosyasının SqlDumperDumpFlags özelliğini ayarlamak için komut istemine karşılık gelen komutu yazın ve Enter tuşuna basın:

      • Tüm iş parçacığı tam döküm dosyası

        • Varsayılan örnek

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x01100
          
        • Adlandırılmış örnek

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x01100
          
      • Tüm iş parçacığı mini döküm dosyası

        • Varsayılan örnek

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x0120
          
        • Adlandırılmış örnek

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x0120
          
      • Tüm iş parçacığı döküm dosyası filtrelendi

        • Varsayılan örnek

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x8100
          
        • Adlandırılmış örnek

          cluster resource "SQL Server  (INSTANCE1)" /priv SqlDumperDumpFlags = 0x8100
          
    • özelliği SqlDumperDumpPath

      cluster resource "SQL Server" /priv SqlDumperDumpPath = <DirectoryPath>
      

      Not

      <DirectoryPath> , döküm dosyasının oluşturulacağı dizin için bir yer tutucudur ve tırnak işaretleri (" ") içinde belirtilmelidir.

    • özelliği SqlDumperDumpTimeOut

      cluster resource "SQL Server" /priv SqlDumperDumpTimeOut = <Timeout>
      

      Not

      <Zaman aşımı> , milisaniye (ms) cinsinden zaman aşımı için bir yer tutucudur.

Aracın SQL Server işleminin döküm dosyasını oluşturma süresi bilgisayar yapılandırmasına bağlıdır. Büyük miktarda belleğe sahip bir bilgisayar için bu süre önemli olabilir. İşlem için gereken süreyi tahmin etmek için Sqldumper.exe aracını kullanarak el ile döküm dosyası oluşturun. özelliği için SqlDumperDumpTimeOut geçerli değerler 10.000 ms ile MAXDWORD aralığındadır. MAXDWORD, DWORD veri türü (4294967295) aralığındaki en yüksek değeri temsil eder.

Ayarların etkinleştirildiğini doğrulamak için aşağıdaki komutu çalıştırabilirsiniz:

cluster resource "SQL Server" /priv

Küme yük devretmesi için Sqldumper.exe özelliklerini kaldırma

Küme yük devretmesi için Sqldumper.exe aracı özelliklerini kaldırmak için şu adımları izleyin:

  1. Çalıştırmayı Başlat'ı>seçin, cmd yazın ve tamam'ı seçin.

  2. Belirli bir özellik için komut istemine karşılık gelen komutu yazın ve Enter tuşuna basın:

    • özelliği SqlDumperDumpFlags

      • Varsayılan örnek

          cluster resource "SQL Server" /priv:SqlDumperDumpFlags /usedefault
        
      • Adlandırılmış örnek

          cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpFlags /usedefault
        
    • özelliği SqlDumperDumpPath

      • Varsayılan örnek

        cluster resource "SQL Server" /priv:SqlDumperDumpPath /usedefault
        
      • Adlandırılmış örnek

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpPath /usedefault
        
    • özelliği SqlDumperDumpTimeOut

      • Varsayılan örnek

        cluster resource "SQL Server" /priv:SqlDumperDumpTimeOut /usedefault
        
      • Adlandırılmış örnek

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpTimeOut /usedefault
        

DBCC STACKDUMP'yi kullanma

komutu, DBCC STACKDUMP SQL Server örnek yüklemenizin LOG dizininde bir bellek dökümü oluşturmanıza yardımcı olabilir. Komutu varsayılan olarak boyutu sınırlı olan ve SQL Server işleminin durumunu yansıtmak için yeterli olan tüm iş parçacıklarıyla bir minidump oluşturur. SQL Server istemcisinde aşağıdaki komutu çalıştırın:

DBCC STACKDUMP

SQL Server 2019'da genişletilmiş işlevselliği DBCC STACKDUMP için bkz . SQL Server 2019'da sunulan genişletilmiş DBCC STACKDUMP işlevselliği.

Bu yöntemin filtrelenmiş döküm oluşturmasını sağlamak için aşağıdaki komutu kullanarak izleme bayrakları 2551'i açın:

DBCC TRACEON(2551, -1)
GO
DBCC STACKDUMP

Tam döküm oluşturmak için 2544 izleme bayrağını kullanın.

Döküm dosyasını aldıktan sonra, diğer tüm SQL Server kendi kendine tanılama minidumlarını yanlışlıkla daha büyük dökümlere yükseltmekten kaçınmak için komutunu DBCC TRACEOFF (<TraceNumber>, -1); kullanarak izleme bayrağını devre dışı bırakmanız gerekir. Komutta TraceNumber>, <daha önce 2551 veya 2544 gibi etkinleştirdiğiniz izleme bayrağıdır. Örneğin:

DBCC TRACEOFF(2551, -1)

Hangi izleme bayrağının etkin kaldığından emin değilseniz aşağıdaki komutu çalıştırın:

DBCC TRACESTATUS(-1)

Boş bir sonuç kümesi hiçbir izleme bayrağının etkin olmadığını gösterir. Buna karşılık, 2551 hala etkinse şunları görürsünüz:

TraceFlag Durum Global Oturum
2551 1 1 0

Not

tarafından traceflag etkinleştirildiğinde DBCC TRACEON , hizmet yeniden başlatıldıktan sonra sıfırlanır (kaldırılır).

SQL Server 2019'da kullanıma sunulan genişletilmiş DBCC STACKDUMP işlevselliği

SQL Server 2019 CU2'den başlayarak, DBCC STACKDUMP komut mini, filtrelenmiş ve tam dökümler gibi farklı türlerdeki dökümlerin oluşturulmasını destekleyecek şekilde genişletildi. Bu komut, izleme bayraklarını kullanma gereksinimini ortadan kaldırır. Ayrıca, bellek dökümüyle oluşturulan diğer metin dosyasındaki metin çıkışını sınırlamanıza da olanak tanır. Bunu yapmak, bellek dökümü oluşturmak için SQLDumper.exe geçen süre içinde görünür performans kazancı sağlayabilir.

DBCC STACKDUMP WITH MINI_DUMP | FILTERED_DUMP | FULL_DUMP [, TEXT_DUMP = LIMITED | DETAILED]

TEXT_DUMP = LIMITED varsayılan seçenektir. SQLDump000X.txt dosyasında ayrıntılı çıktı almak isterseniz kullanabilirsinizTEXT_DUMP = DETAILED.

.txt dosyasında sınırlı çıkışa sahip filtrelenmiş bir döküm oluşturmak için aşağıdaki komutu çalıştırın:

DBCC STACKDUMP WITH FILTERED_DUMP , TEXT_DUMP = LIMITED

SQLDumper ile döküm dosyası oluşturmak için PowerShell betiğini kullanma

  • Aşağıdaki kodu PS1 dosyası olarak kaydedin, örneğin SQLDumpHelper.ps1:

    Kod ayrıntıları

    $isInt = $false
    $isIntValDcnt = $false
    $isIntValDelay = $false
    $SqlPidInt = 0
    $NumFoler = ""
    $OneThruFour = ""
    $SqlDumpTypeSelection = ""
    $SSASDumpTypeSelection = ""
    $SSISDumpTypeSelection = ""
    $SQLNumfolder = 0
    $SQLDumperDir = ""
    $OutputFolder = ""
    $DumpType = "0x0120"
    $ValidPid
    $SharedFolderFound = $false
    $YesNo = ""
    $ProductNumber = ""
    $ProductStr = ""
    
    Write-Host ""
    Write-Host "`******************************************************************"
    Write-Host "This script helps you generate one or more SQL Server memory dumps"
    Write-Host "It presents you with choices on:`
                -target SQL Server process (if more than one)
                -type of memory dump
                -count and time interval (if multiple memory dumps)
    You can interrupt this script using CTRL+C"
    Write-Host "***********************************************************************"
    
    # check for administrator rights
    # debugging tools like SQLDumper.exe require Admin privileges to generate a memory dump
    
    if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
    {
        Write-Warning "Administrator rights are required to generate a memory dump!`nPlease re-run this script as an Administrator!"
        return
    }
    
    # what product would you like to generate a memory dump
    while ($true)
    {
        Write-Host "Which product would you like to generate a memory dump of?" -ForegroundColor Yellow
        Write-Host "1) SQL Server"
        Write-Host "2) SSAS (Analysis Services)"
        Write-Host "3) SSIS (Integration Services)"
        Write-Host "4) SSRS (Reporting Services)"
        Write-Host "5) SQL Server Agent"
        Write-Host ""
        $ProductNumber = Read-Host "Enter 1-5>"
    
        if ($ProductNumber -in 1,2,3,4,5)
        {
            break
        }
        Write-Host "`nPlease enter a valid number from list above!`n"
        Start-Sleep -Milliseconds 300
    }
    
    if ($ProductNumber -eq "1")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlservr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server"
    }
    elseif ($ProductNumber -eq "2")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msmdsrv*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSAS (Analysis Services)"
    }
    elseif ($ProductNumber -eq "3")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msdtssrvr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSIS (Integration Services)"
    }
    elseif ($ProductNumber -eq "4")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq reportingservicesservice*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSRS (Reporting Services)"
    }
    elseif ($ProductNumber -eq "5")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlagent*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server Agent"
    }
    
    if ($SqlTaskList.Count -eq 0)
    {
        Write-Host "There are currently no running instances of $ProductStr. Exiting..." -ForegroundColor Green
        break
    }
    
    # if multiple SQL Server instances, get the user to input PID for desired SQL Server
    if ($SqlTaskList.Count -gt 1)
    {
        Write-Host "More than one $ProductStr instance found."
    
        $SqlTaskList | Select-Object PID, "Image name", Services | Out-Host
    
        # check input and make sure it is a valid integer
        while ($true)
        {
            Write-Host "Please enter the PID for the desired SQL service from list above" -ForegroundColor Yellow
            $SqlPidStr = Read-Host ">"
    
            if( $SqlPidStr -in $SqlTaskList.PID)
            {
                $SqlPidInt = [int]$SqlPidStr
                break
            }
        }
    
        Write-Host "Using PID=$SqlPidInt for generating a $ProductStr memory dump" -ForegroundColor Green
        Write-Host ""
    
    }
    else # if only one SQL Server/SSAS on the box, go here
    {
        $SqlTaskList | Select-Object PID, "Image name", Services | Out-Host
        $SqlPidInt = [convert]::ToInt32($SqlTaskList.PID)
    
        Write-Host "Using PID=", $SqlPidInt, " for generating a $ProductStr memory dump" -ForegroundColor Green
        Write-Host ""
    }
    
    # dump type
    
    if ($ProductNumber -eq "1")  # SQL Server memory dump
    {
        # ask what type of SQL Server memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Mini-dump with referenced memory " -NoNewLine; Write-Host "(Recommended)"
            Write-Host "3) Filtered dump " -NoNewline; Write-Host "(Not Recommended)" -ForegroundColor Red
            Write-Host "4) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SqlDumpTypeSelection = Read-Host "Enter 1-4>"
    
            if ($SqlDumpTypeSelection -in 1,2,3,4)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SqlDumpTypeSelection)
        {
            "1" { $DumpType="0x0120"; break }
            "2" { $DumpType="0x0128"; break }
            "3" { $DumpType="0x8100"; break }
            "4" { $DumpType="0x01100"; break }
            default { "0x0120"; break }
        }
    }
    elseif ($ProductNumber -eq "2")  # SSAS dump
    {
        # ask what type of SSAS memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SSASDumpTypeSelection = Read-Host "Enter 1-2>"
    
            if ($SSASDumpTypeSelection -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SSASDumpTypeSelection)
        {
            "1" {$DumpType="0x0";break}
            "2" {$DumpType="0x34";break}
            default {"0x0120"; break}
        }
    }
    elseif ($ProductNumber -in 3,4,5)  # SSIS/SSRS/SQL Agent dump
    {
        # ask what type of SSIS memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump"
            Write-Host ""
            $SSISDumpTypeSelection = Read-Host "Enter 1-2>"
    
            if ($SSISDumpTypeSelection -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SSISDumpTypeSelection)
        {
            "1" { $DumpType="0x0"; break }
            "2" { $DumpType="0x34"; break }
            default { "0x0120"; break }
        }
    }
    
    # Sqldumper.exe PID 0 0x0128 0 c:\temp
    # output folder
    while($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
    {
        Write-Host ""
        Write-Host "Where would your like the memory dump stored (output folder)?" -ForegroundColor Yellow
        $OutputFolder = Read-Host "Enter an output folder with no quotes (e.g. C:\MyTempFolder or C:\My Folder)"
        if ($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
        {
            Write-Host "'" $OutputFolder "' is not a valid folder. Please, enter a valid folder location" -ForegroundColor Yellow
        }
    }
    
    # strip the last character of the Output folder if it is a backslash "\". Else Sqldumper.exe will fail
    if ($OutputFolder.Substring($OutputFolder.Length-1) -eq "\")
    {
        $OutputFolder = $OutputFolder.Substring(0, $OutputFolder.Length-1)
        Write-Host "Stripped the last '\' from output folder name. Now folder name is  $OutputFolder"
    }
    
    # find the highest version of SQLDumper.exe on the machine
    $NumFolder = dir "C:\Program Files\Microsoft SQL Server\1*" | Select-Object @{name = "DirNameInt"; expression={[int]($_.Name)}}, Name, Mode | Where-Object Mode -Match "da*" | Sort-Object DirNameInt -Descending
    
    for( $j=0; $j -lt $NumFolder.Count; $j++)
    {
        $SQLNumfolder = $NumFolder.DirNameInt[$j]   # start with the highest value from sorted folder names - latest version of dumper
        $SQLDumperDir = "C:\Program Files\Microsoft SQL Server\" + $SQLNumfolder.ToString() + "\Shared\"
        $TestPathDumperDir = $SQLDumperDir + "sqldumper.exe"
    
        if (Test-Path -Path $SQLDumperDir)
        {
            break
        }
    }
    
    # build the SQLDumper.exe command e.g. (Sqldumper.exe 1096 0 0x0128 0 c:\temp\)
    
    $cmd = "$([char]34)"+$SQLDumperDir + "sqldumper.exe$([char]34)"
    $arglist = $SqlPidInt.ToString() + " 0 " +$DumpType +" 0 $([char]34)" + $OutputFolder + "$([char]34)"
    Write-Host "Command for dump generation: ", $cmd, $arglist -ForegroundColor Green
    
    # do-we-want-multiple-dumps section
    Write-Host ""
    Write-Host "This utility can generate multiple memory dumps, at a certain interval"
    Write-Host "Would you like to collect multiple memory dumps (2 or more)?" -ForegroundColor Yellow
    
    # validate Y/N input
    while ($true)
    {
        $YesNo = Read-Host "Enter Y or N>"
    
        if ($YesNo -in "y","n")
        {
            break
        }
        Write-Host "Not a valid 'Y' or 'N' response"
    }
    
    # get input on how many dumps and at what interval
    if ($YesNo -eq "y")
    {
        [int]$DumpCountInt=0
        while (1 -ge $DumpCountInt)
        {
            Write-Host "How many dumps would you like to generate for this $ProductStr ?" -ForegroundColor Yellow
            $DumpCountStr = Read-Host ">"
    
            if ([int]::TryParse($DumpCountStr, [ref]$DumpCountInt) -and $DumpCountInt -gt 1)
            {
                break
            }
            Write-Host "Please enter a number greater than one." -ForegroundColor Red
        }
    
        [int]$DelayIntervalInt=0
        while ($true)
        {
            Write-Host "How frequently (in seconds) would you like to generate the memory dumps?" -ForegroundColor Yellow
            $DelayIntervalStr = Read-Host ">"
    
            if ([int]::TryParse($DelayIntervalStr, [ref]$DelayIntervalInt) -and $DelayIntervalInt -gt 0)
            {
                break
            }
            Write-Host "Please enter a number greater than zero." -ForegroundColor Red
        }
    
        Write-Host "Generating $DumpCountInt memory dumps at a $DelayIntervalStr-second interval" -ForegroundColor Green
    
        # loop to generate multiple dumps
        $cntr = 0
        while ($true)
        {
            Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
            $cntr++
    
            Write-Host "Generated $cntr memory dump(s)." -ForegroundColor Green
    
            if ($cntr -ge $DumpCountInt)
            {
                break
            }
            Start-Sleep -S $DelayIntervalInt
        }
    
        # print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
    
        Write-Host ""
        Write-Host "Process complete"
    }
    else # produce just a single dump
    {
        Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
    
        # print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
    
        Write-Host ""
        Write-Host "Process complete"
    }
    
    Write-Host "For errors and completion status, review SQLDUMPER_ERRORLOG.log created by SQLDumper.exe in the output folder '$OutputFolder'.`nOr if SQLDumper.exe failed, look in the folder from which you are running this script."
    
  • Aşağıdaki komutu kullanarak komut isteminden yönetici olarak çalıştırın:

    Powershell.exe -File SQLDumpHelper.ps1
    
  • Veya aşağıdaki komutu kullanarak Windows PowerShell konsolundan çalıştırın ve yönetici olarak çalıştırın:

    .\SQLDumpHelper.ps1
    

Not

Sisteminizde PowerShell betiklerini hiç çalıştırmadıysanız aşağıdaki hata iletisini alabilirsiniz:

"Dosya ... Çalışan betikler bu sistemde devre dışı bırakıldığından SQLDumpHelper.ps1 yüklenemiyor."

Komutları çalıştırma özelliğini etkinleştirmek için şu adımları izleyin:

  1. Yönetici Olarak Çalıştır seçeneğini kullanarak Windows PowerShell konsolunu başlatın. Yürütme ilkesini yalnızca bilgisayardaki yöneticiler grubunun üyeleri değiştirebilir.

  2. Aşağıdaki komutla imzalanmamış betiklerin çalıştırılmasını etkinleştirin:

    Set-ExecutionPolicy RemoteSigned
    

    Not

    Bu, yerel bilgisayarınızda oluşturduğunuz imzasız betikleri ve İnternet'ten imzalanmış betikleri çalıştırmanızı sağlar.