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

Bu makalede, SQL Server'da bulunan Sqldumper.exe aracı için genel yönergeler sağlanır. Bu araç, farklı türde dump 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 ve ilgili işlemlerin bellek dökümü dosyalarını 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 diğer yöntem de 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 nasıl çalıştırılır

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

Varsayılan olarak, Sqldumper.exe yükleme yolu <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe. <SQLServerInstall Drive> ifadesinin, 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ır'ı seçin, cmd yazın ve ardından 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, <number>, daha önce açıklandığı gibi SQL Server sürümüyle değişen aynı yer tutucudur.

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

    • Tam döküm dosyası:

      Sqldumper.exe <ProcessID> 0 0x01100
      
    • Mini dump 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'nin oluşturduğu döküm dosyasının, SQLDmpr<xxxx>.mdmp biçimine 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şlem kimliği 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'ni seçin.
  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.

Server process ID sonrasında görünen sayı, Sqlservr.exe işleminin işlem tanımlayıcısıdır.

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

SQLDumper.exe öncelikle özel durumlar, assertler veya yield etmeyen 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 yol nasıl değiştirilir

Ö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'ni açın.
  2. SQL Server Hizmetleri altında, inceleme altındaki SQL Server örneğini bulun.
  3. Bu girdiye sağ tıklayın, Özellikler'i seçin ve ardından Gelişmiş sekmesine gidin.
  4. Döküm Dizini'ni istediğiniz yola değiştirip ardından 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 çalışmaz. Bellek dökümü dosyası için konum olarak UNC 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ır'ı seçin, cmd yazın ve ardından OK'yi seçin.

  2. Komut isteminde aşağıdaki komutu yazın ve ardından 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 ardından 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'nin ş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 devralması 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öneticinin 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ır'ı seçin, mstsc /console yazın ve ardından 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'yi çalıştırdıktan sonra geçerli klasörde hiçbir döküm dosyasının 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ında 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ına 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ü"

Dump 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 serileştirmek için gereken süre boyunca hedef İşlem (burada SQLServer.exe) dondurulur.

Donmuş, işlemin Windows Kümelemesi'nin IsAlive ve Looks Alive 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 aşılabilir.

Önceki ifadeye bağlı olarak, donma süresi buradaki kritik faktördür ve aşağıdakilere bağlıdır:

  • Seçilen döküm dosyası türü.
  • Bellekteki SQL Server işleminin boyutu, varsayılan parametrelerle çalışan tek bir etkin örnek söz konusu olduğunda genellikle sunucunun toplam fiziksel RAM'ine yakındır.
  • 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 alma 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 da, varsayılan basit yapılandırmada, SQL Server için aynı zamanda sistem diski ve veri+günlük diski olacaktır. Bu diskin doygunluğa ulaşması, 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 Always On bağlamlarında (Yük Devretme Kümesi örneği ve Kullanılabilirlik grubu) kaynakların yük devretmesini tetikleyebilir. Farklı işlemlerin dump oluşturması kaynakları farklı etkiler. Döküm oluşturmanın etkisi ve Döküm türleri bölümlerini dikkatle okuyun.

SQL Server’ın yük devretme kümelemesi örneğinde veya 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üme ö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şlatmayın seçeneğini belirleyin.
    • Ö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şlatma ilkesi yok sayı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ı örneğin 120 saniyeye artırın. SQL Server Management Studio'da (SSMS), yapılandırılacak çoğaltmaya sağ tıklayın ve ardından Ö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 replikaları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 devretme ayarını el ile yük devretme olarak değiştirin. Daha fazla bilgi için bkz. Bir Kullanılabilirlik Çoğaltmasının Yük Devretme Modunu Değiştirme (SQL Server).
    • LeaseTimeout değerini 60.000 ms (60 saniye) olarak artırın ve HealthCheckTimeoutdeğ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:

Bitmap 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, RTM'de ve CU15'e kadar 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 dump'ların ortadan kaldırılması

Aynı sorunla ilgili yinelenen bellek dökümleri ortadan kaldırılır. SQL altyapısı, yığın imzası kullanarak bir özel durumun zaten oluşup oluşmadığını izler ve zaten bir bellek dökümü varsa yeni bir bellek dökümü oluşturmaz. Bu, erişim ihlalleri, yığın taşması, assert'ler 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ış çıktı

SQL Server hata günlüğünde tek bir bellek dökümüyle oluşturulan içerik bunaltıcı 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, örneğin kullanıcı tarafından manuel dump tetiklendiğinde her oturum veya iş parçacığı için bilgileri yazdırıyordu.

Bellek dökümlerinin paralel sıkıştırılması

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 -T2610 öğesini başlangıç parametresi olarak ekleyebilirsiniz.

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

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

Ayrıca, Sqldumper.exe’nin sıkıştırılmış dökümü oluşturmak için kullanabileceği çekirdek sayısını, -cpu:X parametresini kullanarak sınırlayabilirsiniz; 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ı sorunlarını araştırmak ve gidermek bir sonraki mantıksal adımdır.
  • Virüsten koruma veya başka bir izleme yazılımı SQLDumper.exe'ye müdahale ediyor. Bazı durumlarda, üçüncü taraf yazılım ReadProcessMemory işlevini saptırır. Bu, dump 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ümleme 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şvurulan belleği içeren 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üdür; ayrıca iş parçacığı yığınları tarafından başvurulan belleğin sınırlı bir bölümünü ve diğer bazı önemli işlem veya iş parçacığı verilerini içerir. Genellikle boyutu birkaç megabayttır ve oluşturması hızlıdır (bir saniyeden daha azdan birkaç saniyeye kadar). Daha büyük sunucu sistemleri bile (SQL Server işleminde yüzlerce CPU’nun dolaylı olarak çok sayıda iş parçacığına yol açtığı sistemler) 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ü, SQL Server tarafından özel durumlarda, zamanlayıcı sorunlarında, latch sorunlarında, veritabanı bozulmasında ve assert hatalarında otomatik olarak bellek dökümleri oluşturulurken kullanılan varsayılan türdür.

Not:

SQL Server, yerleşik izleme altyapısının 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üm dosyaları

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. Tek bir SQL Server örneğine ayrılmış büyük sunucularda bu, birkaç yüz gigabayt veya daha büyük tek bir dosya anlamına gelebilir. Söylemeye gerek yok, böyle bir dosyanın oluşturulması uzun zaman alacak ve bu nedenle uzun süreli donmaya neden olacak. Dump dosyasının 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ışlanarak diske yazılan döküme dahil edilmediği tam döküm alt kümesidir. Genellikle hariç tutulan bellek, sorun gidermeye ek değer getirmez. Veri/dizin sayfaları ve Hekaton veri sayfaları ve Log Pool 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ığı durumların büyük çoğunluğunda 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 payı sağlamak üzere en kötü senaryoda tam döküm kadar büyük olası bir 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 kilitli 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 için döküm dosyaları başarıyla oluşturabilirsiniz.

SQL Server işlemi, işlem herhangi bir özel durumlarla 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'ye aktarır. Bir özel durum veya doğrulama hatası 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. SQLDumper.exe'nin oluşturduğu 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şturduktan sonra döküm tetikleyicisini temizleyecektir.

İki veya daha fazla izleme bayrağı etkinse, en büyük bellek dökümünü gösteren seçenek geçerli sayılır. Ö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, 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 ALTER SERVER CONFIGURATION (T-SQL) komutunu kullanabilirsiniz. Ö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, SQL2017AG adlı bir örnek için:

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 yük devretmesi için Sqldumper.exe yardımcı programı özelliklerini cluster resource komutunu kullanarak ayarlamak üzere şu adımları izleyin:

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

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

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

        • Varsayılan örneği

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

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

        • Varsayılan oluşum

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

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

        • Varsayılan örneği

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

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

      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.

    • SqlDumperDumpTimeOut özelliği

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

      Not:

      <Timeout>, 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 dump dosyası oluşturun. SqlDumperDumpTimeOut özelliği için geçerli değerler 10.000 ms ile MAXDWORD.MAXDWORD arasındadır. MAXDWORD.MAXDWORD, DWORD veri türü aralığındaki en yüksek değeri (4294967295) 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

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

  1. >, Çalıştır'ı seçin, cmd yazın ve ardından Tamam'ı seçin.

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

    • SqlDumperDumpFlags özelliği

      • Varsayılan örneği

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

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

      • Varsayılan oluşum

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

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

      • Varsayılan örneği

        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. Komut, 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

DBCC STACKDUMP öğesinin SQL Server 2019’daki genişletilmiş işlevselliği 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 DBCC TRACEOFF (<TraceNumber>, -1); komutunu 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:

DBCC TRACEON tarafından etkinleştirilen traceflag, 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, SQLDumper.exe'nin bellek dökümü oluşturması için geçen sürede görünür bir 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 istiyorsanız, TEXT_DUMP = DETAILED kullanabilirsiniz.

.txt dosyasında çıktısı sınırlı 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 ...SQLDumpHelper.ps1 yüklenemiyor çünkü bu sistemde betiklerin çalıştırılması devre dışı bırakılmıştır.

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

  1. Windows PowerShell konsolunu Yönetici Olarak Çalıştır seçeneğini kullanarak 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.