Sql-Server
Azuredb 數據庫“tempdb”已達到其大小配額
我們正在 S3 層上執行 V12 Azure 數據庫實例。數據庫上仍有大約 100GB 的可用空間。當使用在不同的非 Azure SQL 伺服器上執行的 SSIS 載入 85MB XML 文件並將其直接插入到 azure 數據庫中時,插入在目標數據庫上崩潰並出現以下錯誤。
數據庫“tempdb”已達到其大小配額。分區或刪除數據、刪除索引或查閱文件以獲取可能的解決方案。
tempdb 是否有任何限制,或者知道為什麼這可能會崩潰?85MB的文件怎麼可能填滿數據庫的剩餘空間。似乎以
tempdb
某種方式隱藏,我如何監控它的使用情況?
限制取決於您的服務試用者,在此情況下,數據庫不少於 250 GB,但附加到此數據庫的 tempdb 僅為 32 MB。您可以在此處查看其他可用資源Azure SQL 數據庫資源限制和有關 Azure tempdb 的資訊,此處為 SQL 數據庫中的 Tempdb 數據庫。
有幾個選項可讓您調查 tempdb 的情況。它是隱藏的,但您仍然可以查詢 sys 對像以檢索有關此類數據庫的資訊。嘗試檢查以下資源:
- 經驗教訓 #10:監控 TempDB 使用情況(評論中的有用答案,每個數據庫一個 tempdb)
- 如何確定哪個查詢正在填滿 tempdb 事務日誌?
- 如何監控 tempdb 的使用
當您發現什麼正在消耗 tempdb 資源時,您應該能夠修復它或使用其他資訊擴展您的問題。
正如您所說,您的文件是 85 MB,我們可以看到它超過了最大 tempdb 數據大小。嘗試一次處理較小的數據塊。在這種情況下,您還應該考慮 BULK 插入。
您可以執行以下命令來檢索有關哪些任務(在 Azure V12 數據庫中)正在使用 Tempdb(從您的 userDB 執行)的資訊:
SELECT es.host_name , es.login_name , es.program_name , st.dbid as QueryExecContextDBID, DB_NAME(st.dbid) as QueryExecContextDBNAME , st.objectid as ModuleObjectId , SUBSTRING(st.text, er.statement_start_offset/2 + 1 ,(CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max),st.text))*2 ELSE er.statement_end_offset END - er.statement_start_offset)/2 ) as Query_Text , tsu.session_id ,tsu.request_id, tsu.exec_context_id , (tsu.user_objects_alloc_page_count - tsu.user_objects_dealloc_page_count) as OutStanding_user_objects_page_counts , (tsu.internal_objects_alloc_page_count - tsu.internal_objects_dealloc_page_count) as OutStanding_internal_objects_page_counts , er.start_time, er.command, er.open_transaction_count , er.percent_complete, er.estimated_completion_time , er.cpu_time, er.total_elapsed_time, er.reads,er.writes , er.logical_reads, er.granted_query_memory FROM tempdb.sys.dm_db_task_space_usage tsu JOIN sys.dm_exec_requests er ON tsu.session_id = er.session_id AND tsu.request_id = er.request_id JOIN sys.dm_exec_sessions es ON tsu.session_id = es.session_id CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) st WHERE (tsu.internal_objects_alloc_page_count +tsu.user_objects_alloc_page_count) > 0 ORDER BY (tsu.user_objects_alloc_page_count - tsu.user_objects_dealloc_page_count) + (tsu.internal_objects_alloc_page_count - tsu.internal_objects_dealloc_page_count) DESC