Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazı senaryolarda SqlPackage işlemleri beklenenden uzun sürer veya tamamlanamadı. Bu makalede, bu işlemlerin performansını gidermek veya iyileştirmek için sık önerilen bazı taktikler açıklanmaktadır. Kullanılabilir parametreleri ve özellikleri anlamak için her eylemin belirli belge sayfasını okumak önerilir ancak bu makale SqlPackage işlemlerini araştırmada bir başlangıç noktası görevi görür.
Genel strateji
Genel yönergeler olarak, DacFramework.msiaracılığıyla yüklenen .NET Framework sürümü yerine SqlPackage'ın .NET sürümü ile daha iyi performans elde edilebilir.
SqlPackage dotnet aracını, yani SqlPackage komutlarını herhangi bir dizindeki komut isteminden çalıştırmanızı sağlayan aracı yükleyemiyorsanız:
- İşletim sisteminiz (Windows, macOS veya Linux) için .NET 8'de SqlPackage zip'ini indirin.
- İndirme sayfasındaki talimatlara göre arşivi açın.
- Bir komut istemi açın ve dizini (
cd
) SqlPackage klasörüne değiştirin.
Performans iyileştirmeleri ve hata düzeltmeleri düzenli olarak yayınlandığından SqlPackage'ın kullanılabilir en son sürümünü kullanmak önemlidir.
İçeri/Dışarı Aktarma Hizmeti için SqlPackage'ın yerini alma
Veritabanınızı içeri veya dışarı aktarmak için İçeri/Dışarı Aktarma Hizmeti'ni kullanmayı denediyseniz, isteğe bağlı parametreler ve özellikler üzerinde daha fazla denetimle aynı işlemi gerçekleştirmek için SqlPackage'ı kullanabilirsiniz.
İçeri Aktarma için örnek bir komut:
./SqlPackage /Action:Import /sf:<source-bacpac-file-path> /tsn:<full-target-server-name> /tdn:<a new or empty database> /tu:<target-server-username> /tp:<target-server-password> /df:<log-file>
Dışarı Aktarma için örnek bir komut:
./SqlPackage /Action:Export /tf:<target-bacpac-file-path> /ssn:<full-source-server-name> /sdn:<source-database-name> /su:<source-server-username> /sp:<source-server-password> /df:<log-file>
Kullanıcı adı ve parolaya alternatif olarak çok faktörlü kimlik doğrulaması, çok faktörlü kimlik doğrulamasıyla Microsoft Entra kimlik doğrulaması (eski adı Azure Active Directory) aracılığıyla kimlik doğrulaması yapmak için kullanılabilir.
/ua:true
ve /tid:"yourdomain.onmicrosoft.com"
için kullanıcı adı ve parola parametrelerini değiştirin.
Tanılama
SqlPackage'da hataları ve beklenmeyen davranışları tanılama, tanılama günlükleri ve bir tanılama paketi tarafından desteklenir. Tanılama günlükleri sorun giderme için gereklidir ve /DiagnosticsFile:<filename>
parametresiyle bir dosyaya kaydedilir.
Tanılama çıkışındaki ayrıntı düzeyi, /DiagnosticsLevel
parametresi aracılığıyla denetlenmektedir.
Information
ve Verbose
değerleri daha fazla ayrıntı elde etmek için yararlıdır.
SqlPackage çalıştırılmadan önce ortam değişkeni DACFX_PERF_TRACE=true
ayarlanarak performansla ilgili izleme verileri kaydedilebilir. İzleme verileri günlük çıktıyı artırır, bu nedenle yalnızca performans zorluklarını teşhis ederken dahil edin. PowerShell'de bu ortam değişkenini ayarlamak için aşağıdaki komutu kullanın:
Set-Item -Path Env:DACFX_PERF_TRACE -Value true
SqlPackage 162.5 ve sonraki sürümlerinde, sorun gidermeye yardımcı olacak bir tanılama paketi oluşturulabilir. Tanılama paketi SqlPackage sürümünü, yürütülen komutu, kaynak ve hedef veritabanı modelleri hakkındaki bilgileri ve komutun çıkışını içerir. Tanılama paketi oluşturmak için /DiagnosticsPackageFile:<filename>
parametresini kullanın.
Yaygın sorunlar
Zaman aşımı hataları
Zaman aşımlarıyla ilgili sorunlar için, SqlPackage ile SQL örneği arasındaki bağlantıyı ayarlamak için aşağıdaki özellikler kullanılabilir:
-
/p:CommandTimeout=
: Sorgu yürütülürken komut zaman aşımını saniyeler içinde belirtir. Varsayılan: 60 -
/p:DatabaseLockTimeout=
: Veritabanı kilit zaman aşımını saniye olarak belirtir. -1 süresiz olarak beklemek için kullanılabilir, varsayılan: 60 -
/p:LongRunningCommandTimeout=
: Uzun süre çalışan komut zaman aşımını saniye olarak belirtir. Varsayılan değer olan 0, süresiz olarak beklemek için kullanılır.
İstemci kaynak tüketimi
Dışarı aktarma ve ayıklama komutları için tablo verileri, bacpac/dacpac dosyasına yazılmadan önce ara belleklendirilen geçici bir dizine geçirilir. Bu depolama gereksinimi büyük olabilir ve dışarı aktarılacak verilerin tam boyutuna göre değişir.
/p:TempDirectoryForTableData=<path>
özelliğine sahip alternatif bir geçici dizin belirtin.
Şema modeli bellekte derlendiğinden, büyük veritabanı şemaları için SqlPackage çalıştıran istemci makinesinde bellek gereksinimi önemli olabilir.
Düşük sunucu kaynak tüketimi
Varsayılan olarak, SqlPackage en yüksek sunucu paralelliğini 8 olarak ayarlar. Düşük sunucu kaynak tüketimine dikkat ederseniz, MaxParallelism
parametresinin değerini artırmak performansı artırabilir.
Erişim belirteci
/AccessToken:
veya /at:
parametresini kullanmak SqlPackage için belirteç tabanlı kimlik doğrulamasını etkinleştirir, ancak belirteci komuta geçirmek karmaşık olabilir. PowerShell'de bir erişim belirteci nesnesini işliyorsanız, dize değerini açıkça geçirin veya belirteç özelliğine başvuruyu $() ile sarın. Mesela:
$Account = Connect-AzAccount -ServicePrincipal -Tenant $Tenant -Credential $Credential
$AccessToken_Object = (Get-AzAccessToken -Account $Account -Resource "https://database.windows.net/")
$AccessToken = $AccessToken_Object.Token
SqlPackage /at:$AccessToken
# OR
SqlPackage /at:$($AccessToken_Object.Token)
Bağlantı
SqlPackage bağlanamıyorsa, sunucuda şifreleme etkinleştirilmemiş olabilir veya yapılandırılan sertifika güvenilir bir sertifika yetkilisinden (otomatik olarak imzalanan sertifika gibi) verilmemiş olabilir. SqlPackage komutunu şifreleme olmadan bağlanacak veya sunucu sertifikasına güvenecek şekilde değiştirebilirsiniz. en iyi yöntem, sunucuya güvenilir bir şifreli bağlantı kuruladığından emin olmaktır.
- Şifreleme olmadan bağlanma:
/SourceEncryptConnection:False
veya/TargetEncryptConnection:False
- Sunucu sertifikasına güven:
/SourceTrustServerCertificate:True
veya/TargetTrustServerCertificate:True
Bir SQL örneğine bağlanırken aşağıdaki uyarı iletilerinden herhangi birini görebilirsiniz; bu, komut satırı parametrelerinin sunucuya bağlanmak için değişiklik gerektirebileceğini belirtir:
The settings for connection encryption or server certificate trust may lead to connection failure if the server is not properly configured.
The connection string provided contains encryption settings which may lead to connection failure if the server is not properly configured.
SqlPackage'daki bağlantı güvenliği değişiklikleri hakkında daha fazla bilgi için bkz. sqlpackage 161 Bağlantı Güvenliği Geliştirmeleri.
Kısıtlama için aktarma işlemi hatası 2714
İçeri aktarma eylemi gerçekleştirirken, bir nesne zaten varsa 2714 hatasını alabilirsiniz:
*** Error importing database:Could not import package.
Error SQL72014: Core Microsoft SqlClient Data Provider: Msg 2714, Level 16, State 5, Line 1 There is already an object named 'DF_Department_ModifiedDate_0FF0B724' in the database.
Error SQL72045: Script execution error. The executed script:
ALTER TABLE [HumanResources].[Department]
ADD CONSTRAINT [DF_Department_ModifiedDate_] DEFAULT ('') FOR [ModifiedDate];
Bu hatayı geçici olarak düzeltmenin nedenleri ve çözümleri şunlardır:
- İçeri aktardığınız hedefin boş bir veritabanı olduğunu doğrulayın.
- Veritabanınızda DEFAULT özniteliğini (SQL Server'ın kısıtlamaya rastgele bir ad atadığı) ve açıkça adlandırılmış bir kısıtlama kullanan kısıtlamalar varsa, aynı ada sahip bir kısıtlama iki kez oluşturulabilir. Açıkça adlandırılmış kısıtlamaların tümünü (DEFAULT'u kullanmadan) veya sistem tarafından tanımlanan adların tümünü (DEFAULT'u kullanarak) kullanmanız gerekir.
- model.xml dosyasını el ile düzenleyin ve hata yaşanan kısıtlamayı benzersiz bir adla değiştirin. Bu seçenek yalnızca Microsoft desteği tarafından yönlendirildiğinde ve
.bacpac
bozulma riski oluşturduğunda uygulanmalıdır.
Yığın taşması hatası
Birçok iç içe geçmiş deyim içeren büyük T-SQL betikleri, genellikle aralıklı veya kalıcı yığın taşması istisnalarına neden olur. Böyle bir durumda hata iletisi, Stack overflow
metnini ve yığın izlemesini içerir:
Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor.Visit(Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression)
Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor.ExplicitVisit(Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression)
Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression.Accept(Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor)
Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression.AcceptChildren(Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor)
Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression.Accept(Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor)
Microsoft.SqlServer.TransactSql.ScriptDom.BinaryQueryExpression.AcceptChildren(Microsoft.SqlServer.TransactSql.ScriptDom.TSqlFragmentVisitor)
SqlPackage için bir parametre, sqlpackage işlemini çalıştıran iş parçacığı için en büyük yığın boyutunu belirten /ThreadMaxStackSize:
tüm komutlarda kullanılabilir. Varsayılan değer, SqlPackage çalıştıran .NET sürümü tarafından belirlenir. Büyük bir değer ayarlamak SqlPackage'ın genel performansını etkileyebilir, ancak bu değerin artırılması iç içe geçmiş deyimlerin neden olduğu yığın taşması özel durumunu çözebilir. Mümkün olduğunda yığın taşması özel durumlarını önlemek için T-SQL kodunun yeniden düzenlenmesi önerilir, ancak geçici çözüm olarak /ThreadMaxStackSize:
parametresi kullanılabilir.
/ThreadMaxStackSize:
parametresini kullanırken, performans etkisine dikkat edilirse yinelenen işlemleri yığın taşması özel durumunu çözen en düşük değere ayarlamanız önerilir. parametresinin değeri megabayt (MB) cinsindendir; geçici çözüm olarak test için örnek değerler 10 ve 100'dür.
İçeri aktarma işlemi için ipuçları
Büyük tablolar veya çok sayıda dizine sahip tablolar içeren içeri aktarmalar için, /p:RebuildIndexesOfflineForDataPhase=True
veya /p:DisableIndexesForDataPhase=False
kullanımı performansı artırabilir. Bu özellikler sırasıyla dizin yeniden oluşturma işlemini çevrimdışı olacak veya gerçekleşmeyecek şekilde değiştirir. Bu ve diğer özellikler, SqlPackage İçe Aktarma işlemini ayarlamak için kullanılabilir.
Dışarı aktarma eylemi ipuçları
Dışarı aktarma sırasında performans düşüşünün yaygın bir nedeni çözümlenmemiş nesne başvurularıdır ve bu da SqlPackage'ın nesneyi birden çok kez çözümlemeye çalışmasına neden olur. Örneğin, bir tabloya başvuran bir görünüm tanımlanır ve tablo artık veritabanında yoktur. Dışarı aktarma günlüğünde çözümlenmemiş başvurular görünüyorsa, dışarı aktarma performansını geliştirmek için veritabanının şemasını düzeltmeyi göz önünde bulundurun.
İşletim sistemi disk alanının sınırlı olduğu ve dışarı aktarma sırasında tükendiği senaryolarda, /p:TempDirectoryForTableData
kullanımı dışarı aktarma verilerinin alternatif bir diskte arabelleğe alınmasına olanak tanır. Bu eylem için gereken alan büyük olabilir ve veritabanının tam boyutuna göre değişir. Bu ve diğer özellikler, SqlPackage dışa aktarma işlemini ayarlamak için kullanılabilir.
Dışarı aktarma işlemi sırasında tablo verileri bacpac dosyasında sıkıştırılır.
/p:CompressionOption
, Fast
veya SuperFast
olarak ayarlanmış NotCompressed
kullanımı, çıkış bacpac dosyasını daha az sıkıştırırken dışarı aktarma işlemi hızını artırabilir.
Şema doğrulamasını atlarken veritabanı şemasını ve verilerini almak için Export özelliğini gerçekleştirin. İçe aktarılamayan geçersiz bir dışa aktarma oluşturulabilir.
Azure SQL Veritabanı
Aşağıdaki ipuçları, Bir Azure sanal makinesinden (VM) Azure SQL Veritabanı'na yönelik içeri veya dışarı aktarma çalıştırmaya özeldir:
- En iyi performans için İş Açısından Kritik veya Premium katman veritabanını kullanın.
- VM'de SSD depolama kullanın.
- Bacpac'in fermuarını açmak için yeterli alan olduğundan emin olun.
- SqlPackage'i veritabanıyla aynı bölgedeki bir VM'den yürütür.
- VM'de hızlandırılmış ağı etkinleştirin.
İçeri aktarma işlemi hakkında daha fazla bilgi toplamak için PowerShell betiğini kullanma hakkında daha fazla bilgi için bkz. Öğrenilen Ders #211: SQLPackage İçeri Aktarma İşlemini İzleme.
Diğer kaynaklar
Azure Veritabanı Destek Blogu, SqlPackage ile ilgili çeşitli makaleler de dahil olmak üzere Azure SQL Veritabanı için sorun giderme ve performans ayarlama hakkında birçok makale içerir.
En ilgili makalelerden bazıları şunlardır:
- SqlPackage/ADF kullanarak Azure SQL DB'yi SQL MI'ye geçirme
- Ders Alındı #446: PowerShell ile SQLPackage Günlüğü Hata Ayıklamasını Basitleştirme
- Yönetilen Kimlik ile Sqlpackage'ı kullanma
- Öğrenilen Ders #298: sqlpackage kullanarak veritabanı dışarı aktarma işleminin çok uzun sürmesi
- Öğrenilen Ders #281: Sistem yetersiz bellek özel durumu nedeniyle dışarı aktarma başarısız oluyor
- Öğrenilen Ders #281: İş mantığı nedeniyle bir bacpac dosyası içe aktarılırken oluşan CHECK kısıtlaması sorununu giderme
- Ders Alındı #272: Bacpac dosyası içeri aktarılırken Çalışma Zaman Aşımı Süresi Doldu hata mesajı
- Öğrenilen Ders #213: Tümleşik Güvenlik ayarlandıysa AccessToken özelliği ayarlanamıyor
- Dersler #211: SQLPackage İçeri Aktarma İşlemini İzleme
- Edinilen Dersler #51: Yönetilen Örnek - Sqlpackage.exe ile içe aktarma özelliği otomatik büyümeye izin vermiyor
- Öğrenilen Ders #32: SQL Server'dan Bacpac birden çok veritabanını dışarı aktarma
- Adım Adım: SQLPackage'ı Erişim Belirteci ile kullanma
- Azure SQL DB'yi SQLPackage kullanarak şirket içi SQL server'a veya Azure VM'ye taşırken harmanlama çakışması.
İlgili içerik
- SqlPackage
- SqlPackage İçeri Aktarma parametreleri ve özellikleri
- SqlPackage Dışa Aktarma parametreleri ve özellikleri