AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-28463

Henrik Staun Poulsen's questions

Martin Hope
Henrik Staun Poulsen
Asked: 2024-05-16 21:55:45 +0800 CST

CXSYNC_PORT &“长时间运行低CPU”

  • 3

我有一个简单的查询,例如
select * from MyTable where MyTableID=@p1
sp_BlitzCache 警告我“长时间运行且 CPU 不足”。该表在 MyTableID 上有一个聚集索引,它是一个唯一标识符/GUID。

是否是由于执行语句过于频繁导致的?
是的,这就是实体框架,我们正在努力让它运行得更快,而不需要对 C# 代码进行太多更改(因为它需要很长时间)。

目前运行的 vCores = 80,这“有点”昂贵。我尝试遵循https://www.brentozar.com/blitzcache/long-running-low-cpu/,但这些指南对我来说并不是很清楚。
sp_whoisactive 显示了许多带有 Async_Network_IO 的语句
sp_BlitzFirst 显示 CXSYNC_PORT 作为主要等待类型,到目前为止,但我找不到任何关于此的信息,并且我不知道它是否与此查询或正在运行的许多其他查询之一相关。

我试图找到一个执行计划,但 sp_BlitzIndex 只显示 SQL 语句。但鉴于此,我得到了这个计划:https://www.brentozar.com/pastetheplan/ ?id=r11D40QQ0 它已在我的测试服务器上执行了 13.441.177 次,已运行 55 小时。

为什么我会收到“长时间运行 CPU 不足”的信息以及如何解决该问题?
我还看到简单的插入和更新获得了这个标签。
所有这些“长时间运行低CPU”是否都是由磁盘速度慢引起的?

azure-sql-database
  • 1 个回答
  • 64 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2020-08-07 03:36:11 +0800 CST

字符串或二进制数据将在表 '******' 列 '******' 中被截断。截断值:'******'

  • 10

我们的一个应用程序报告错误消息 2628:

string or binary data would be truncated in table '******', column '******'. Truncated value: '******'

代替

String or binary data would be truncated in table 'mytable', column 'mycolumn'. Truncated value: 'myvalue'.

我用 SSMS 得到的。

我需要更改什么设置才能获得完整的消息?

我试图搜索这个,但我得到的只是我需要将 VERBOSE_TRUNCATION_WARNINGS 设置为 ON,并将 compatibility_level 设置为 150。这是我多年前所做的。

该应用程序具有此错误处理程序:

 try
     {
         ES.isWorking = true;
         Worker worker = new Worker(new DBConnection(Settings.ConnectionString));
         worker.DoWork();
         ES.isWorking = false;
     }
 catch (Exception ex)
     {
         ES.isWorking = false;
         this.eventLog.WriteEntry("In OnTimer exception ! message: " + ex.Message.ToString());
         errorHandler.HandleException(ex, "In OnTimer exception !", ErrorSeverities.Error);
     }

errorHandler 看起来像这样

Public Function HandleException(ByVal incommingEx As System.Exception,
                                   ByVal note As String,
                                   ByVal errorSeverity As ErrorSeverities,
                                   Optional ByVal sessionId As String = "",
                                   Optional ByVal applicationSource As String = "",
                                   Optional ByVal ignoreDB As Boolean = False,
                                   Optional ByVal noMail As Boolean = False) As Integer
    Dim stackTraceBuilder As New System.Text.StringBuilder
    Dim targetSite As String = ""
    Dim errorTime As DateTime = Now
    Dim messageBuilder As New System.Text.StringBuilder
    Dim innerEx As Exception = incommingEx.InnerException
    Dim errorId As Integer = 0
    Dim innerCount As Integer = 1
    Dim loggedToDb As Boolean = False
    Dim appSource As String = Me._applicationSource
    If applicationSource <> "" Then
        appSource = applicationSource
    End If
    '... more code'

    messageBuilder.AppendLine("(" + incommingEx.GetType.Name.ToUpper + ")" + vbCrLf + incommingEx.Message + " - SOURCE: " + incommingEx.Source)
    '...'
    While Not innerEx Is Nothing And innerCount <= 5
        messageBuilder.AppendLine("INNER" + Convert.ToString(innerCount) + " (" + innerEx.GetType.Name.ToUpper + "):" + vbCrLf + **innerEx.Message** + " - SOURCE: " + innerEx.Source)
        If Not innerEx Is Nothing AndAlso Not innerEx.StackTrace Is Nothing Then
            stackTraceBuilder.AppendLine("INNER" + Convert.ToString(innerCount) + ": " + innerEx.StackTrace) 'Me.GetNumberedStack(innerEx))
        End If
        innerEx = innerEx.InnerException
        innerCount += 1
    End While
    '... more code where the error message is inserted in a log table, via a sproc'
End Function

我们以前没有看到过这种行为,但我们最近将 .net 框架更新到了 4.7.2 版本,所以它可能是相关的。

错误文本“字符串或二进制”来自该位

  • innerEx.Message + 那是一个简单的内置异常数据类型。因此,构建字符串的是 VB 和/或 .net 和/或 SQL Server,而不是我们。

该错误发生在调用存储过程之后,用户可能在其中输入了 varchar(1000) 文本。存储过程增加了一点,表没有空间容纳所有 1100 个字节。因此错误。存储过程没有 try-catch 块。

sql-server azure-sql-database
  • 5 个回答
  • 2343 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2019-09-13 00:04:03 +0800 CST

在 Azure 上创建我的第一个弹性数据库作业

  • 1

在https://learn.microsoft.com/en-us/azure/sql-database/sql-database-job-automation-overview上,它说 SQL 代理有一个新的替代品。但是,我无法让它工作。

我在接受“测试版软件”条款时遇到了问题,但我的经理接受了他帐户上的条款,我可以继续。

在门户网站上,我收到此错误消息:

Deployment failed
Deployment to resource group 'MyRG' failed.
Additional details from the underlying API that might be helpful: At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.

我也尝试过Powershell 界面,在这里我卡住了

New-AzSqlElasticJobAgent : No tenant found in the context.  Please ensure that the credentials you provided are authorized to access an Azure subscription, then run Connect-AzAccount to login.
At line:4 char:28
+ $JobAgent = $JobDatabase | New-AzSqlElasticJobAgent -Name $AgentName
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzSqlElasticJobAgent], ArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Sql.ElasticJobs.Cmdlet.NewAzureSqlElasticJobAgent

这可能很简单,但我不知道是什么......

azure-sql-database azure
  • 2 个回答
  • 179 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2019-08-12 22:17:05 +0800 CST

不正确的“敏感数据列应分类”报告

  • 1

每周我都会从我的 Microsoft Azure SQL 数据库中收到不正确的“漏洞评估”电子邮件报告。
它抱怨将 sys.columns 中的is_computed列设置为 1
的列。无法为这些列添加分类。

在此处输入图像描述

是否可以停止警告?

azure-sql-database vulnerability-assessment
  • 2 个回答
  • 1265 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2019-03-22 10:49:31 +0800 CST

Azure SQL 数据库中的 scheduler_count

  • 1

我试图为我的 Azure SQL 数据库找到一个 scheduler_count,以便我可以运行 sp_Blitz。在所有其他平台上,可以从 sys.dm_os_sys_info 中读取 scheduler_count,但目前不提供此 dmv。

SELECT scheduler_count, * FROM sys.dm_os_sys_info;

你知道找到它的方法吗?

我还需要一个(估计)cpu_count。

sql-server azure-sql-database
  • 1 个回答
  • 78 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2019-01-30 00:01:15 +0800 CST

在 Azure SQL 数据库中安装 FirstResponderKit?

  • 4

我刚刚从 BrentOzar.com 下载了最新版本 (20190128) 的 FirstResponderKit,并尝试将其安装在 Azure SQL DB 上。我收到这些错误:

Msg 40515, Level 15, State 1, Procedure sp_AllNightLog, Line 16 [Batch Start Line 13]
Reference to database and/or server name in 'master.sys.procedures' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_AllNightLog_Setup, Line 16 [Batch Start Line 1492]
Reference to database and/or server name in 'master.sys.procedures' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_Blitz, Line 16 [Batch Start Line 2801]
Reference to database and/or server name in 'master.sys.all_objects' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_BlitzLock, Line 16 [Batch Start Line 28063]
Reference to database and/or server name in 'msdb.dbo.sysjobs' is not supported in this version of SQL Server.
Msg 40515, Level 15, State 1, Procedure sp_DatabaseRestore, Line 16 [Batch Start Line 35912]
Reference to database and/or server name in 'master.sys.xp_dirtree' is not supported in this version of SQL Server.

它在我的 SQL Server 2008 上安装得很好。

FirstResponderKit 在 Azure 上工作吗?

编辑: 大部分都在运行,我已经开始更改 sp_blitz,以便它也能运行。如果你想测试它,请查看我的github 。

Edit2: 我已经针对从本地移动的新 Azure SQL 数据库运行它。它为我找到了两个问题(由 Microsoft Data Migration Assistant 引起),关于统计数据未更新,以及许多索引被禁用。我认为其他人会发现类似的问题,如果我们能把这个版本放到主版本中的话。

需要测试人员!

azure-sql-database sp-blitz
  • 1 个回答
  • 1263 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2018-10-27 04:30:03 +0800 CST

“警告:操作导致残留 I/O”与键查找

  • 9

我在 SQL Server 2017 执行计划中看到了这个警告:

警告:操作导致残留 IO [原文如此]。实际读取的行数为 (3,321,318),但返回的行数为 40。

下面是 SQLSentry PlanExplorer 的一个片段:

在此处输入图像描述

为了改进代码,我添加了一个非聚集索引,以便 SQL Server 可以获取相关行。它工作正常,但通常会有太多(大)列包含在索引中。它看起来像这样:

在此处输入图像描述

如果我只添加索引,没有包含列,它看起来像这样,如果我强制使用索引:

在此处输入图像描述

显然,SQL Server 认为键查找比残余 I/O 昂贵得多。我有一个没有太多测试数据的测试设置(还没有),但是当代码投入生产时,它需要处理更多的数据,所以我相当确定需要某种非聚集索引。

当您在 SSD 上运行时,关键查找真的那么昂贵吗,我必须创建全脂索引(包含很多包含列)?


执行计划: https ://www.brentozar.com/pastetheplan/?id=SJtiRte2X它是长存储过程的一部分。寻找IX_BatchNo_DeviceNo_CreatedUTC。

sql-server optimization
  • 1 个回答
  • 6166 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2018-04-26 23:31:50 +0800 CST

安装 SQL Server 2016 sp2 期间失败

  • 4

我正在尝试为 SQL Server 2016 安装新的 SP2,但它在安装过程中失败并出现引擎错误。这是我可以在错误日志中看到的>

错误:468,严重性:16,状态:9。
无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。
失败的一批 t-sql 语句:
CREATE PROCEDURE sp_sqlagent_get_perf_counters @all_counters BIT = 0 AS BEGIN ...

错误:912,严重性:21,状态:2。

数据库“master”的脚本级别升级失败,因为升级步骤“msdb110_upgrade.sql”遇到错误 200,状态 7,严重性 25。这是一个严重的错误情况,可能会干扰常规操作,数据库将脱机。如果在升级“主”数据库期间发生错误,它将阻止整个 SQL Server 实例启动。检查以前的错误日志条目是否有错误,采取适当的纠正措施并重新启动数据库,以便脚本升级步骤运行完成。

错误:3417,严重性:21,状态:3。

无法恢复主数据库。SQL Server 无法运行。从完整备份中恢复 master、修复它或重建它。有关如何重建 master 数据库的详细信息,请参阅 SQL Server 联机丛书。

SQL Server 关闭已启动

主数据库运行“Latin1_General_CI_AS”,MSDB(和其他数据库)运行“SQL_Latin1_General_CP1_CI_AS”。

我有服务器上所有数据库的新备份,包括 master 和 msdb。

我很想尝试恢复主 master,如https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-the-master-database-transact-sql 中所示?视图=sql-server-2017

但我正在努力确保它能够真正发挥作用,而不仅仅是让情况变得更糟。

如何让我的 SQL Server 备份并运行?

编辑:我已经像这样启动了 mssqlserver 服务:

NET START MSSQLSERVER /T902

这使服务器启动,我查看了 msdb110_upgrade.sql,发现我添加了很多缺少的“COLLATE DATABASE_DEFAULT”。

但它没有接受我的改变。

sql-server sql-server-2016
  • 2 个回答
  • 5845 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2017-08-25 23:01:29 +0800 CST

SQL 代理 PowerShell 任务永远不会完成

  • 7

我对 PowerShell 很陌生,现在我找到了 dbatools.io,我想在其中运行 SQL 代理中的 PowerShell 任务,例如

$ExportPath = $env:TEMP + '\DriveSpace.csv'
$datatable = Import-Csv $ExportPath | Out-DbaDataTable
Write-DbaDataTable -SqlServer MyServer -Database Utils -InputObject  $datatable -Table dbo.FreeSpaceOnDiskDrive -AutoCreateTable

它开始了,但它永远不会结束。我也尝试过执行以下任务:

Get-DbaDatabaseSpace -SqlServer MyServer -IncludeSystemDBs | Out-DbaDataTable | Write-DbaDataTable -SqlServer MyServer -database utils -Table dbo.DiskSpaceExample -AutoCreateTable

同样的问题。它在 Windows PowerShell ISE 中运行正常,但只是挂在 SQL 代理中。所以现在它为我创建了一个新表,并用数据填充了它,但工作只是继续运行。

sql-server sql-server-2016
  • 4 个回答
  • 5015 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2017-04-29 03:23:36 +0800 CST

使用页面压缩时的行开销是多少?

  • 10

我创建了一个包含 650 个 Numeric(19,4) 列的表。当我打开页面压缩时,通过运行

ALTER TABLE fct.MyTable REBUILD  WITH (DATA_COMPRESSION = PAGE);

我明白了

消息 1975,级别 16,状态 1
索引“PK_Mytable”行长度超过了“8060”字节的最大允许长度。

但是 650 乘以 9 字节只有 5850 字节,与规定的 8060 字节限制相去甚远。

服务器正在运行带有 SQL Server 2016 SP1 CU2 的 Windows 2012 r2

使用页面压缩时的行开销是多少?

这是一些代码来说明我的意思:

/* test script to demo MSG 1975 */
DECLARE @sql NVARCHAR(max)='', @i INT =0
drop table if exists dbo.mytable;

SET @sql = 'Create table dbo.Mytable (MyTableID bigint not null 
  identity(1,1) primary key clustered, '

WHILE @i < 593 BEGIN
    SET @sql += ' Column' + LTRIM(@i) + ' numeric(19,4) null, '
    SET @i +=1
END

SET @sql += ' LastColumn int) '
--SET @sql += ' with (DATA_COMPRESSION = ROW) '
SET @sql += ' with (DATA_COMPRESSION = PAGE) '

SELECT @sql
EXEC sys.sp_executesql @sql

SELECT top 10000 * FROM dbo.MyTable MT

行压缩也会失败,但行数不同。

sql-server-2016 compression
  • 1 个回答
  • 1598 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2017-02-16 05:47:30 +0800 CST

SQL Server 检测到基于逻辑一致性的 I/O 错误:RESTORE 上的 pageid 不正确

  • 7

将我们的数据库恢复到新的服务器硬件失败并出现页面错误。

Message
SQL Server detected a logical consistency-based I/O error: 
incorrect pageid (expected 49:8125916; actual 49:29097436).
It occurred during a read of page (49:8125916) in database ID 7 at
offset 0x00000f7fbb8000 in file x:\Databases\Data07\DataWarehouse_OperationalData_15.ndf'.
Additional messages in the SQL Server error log or system event
log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). 
This error can be caused by many factors; 
for more information, see SQL Server Books Online.

在这个 70 TB 数据库和 6 年历史的服务器上,DBCC CheckDB 将花费我们大约一周的时间。
有没有可能是我的备份损坏了?
还是说新服务器有问题?
还是问题出在旧服务器上的生产数据库?

这是 SQL Server 2016 SP1 CU1,page_verify_option_desc 是 CHECKSUM。

这是我从新服务器上的错误日志中可以看到的:

Starting up database 'DataWarehouse'.
The database 'DataWarehouse' is marked RESTORING and is in a state that does not allow recovery to be run.
Error: 824, Severity: 16, State: 2.
SQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 49:8125916; actual 49:29097436). It occurred during a read of page (49:8125916) in database ID 7 at offset 0x00000f7fbb8000 in file 'S:\MSSQL\DSA\Databases\DataWarehouse\Data07\DataWarehouse_OperationalData_15.ndf'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Error: 18456, Severity: 14, State: 38.

当我在旧服务器上运行它时:

DBCC TRACEON (3604);
DBCC PAGE ('datawarehouse', 49, 8125916, 0);

我明白了

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

PAGE: (49:8125916)


BUFFER:


BUF @0x000000802C5E9300

bpage = 0x0000004DF03E8000          bhash = 0x0000000000000000          bpageno = (49:8125916)
bdbid = 5                           breferences = 1                     bcputicks = 0
bsampleCount = 0                    bUse1 = 5844                        bstat = 0x9
blog = 0x15ab215a                   bnext = 0x0000000000000000          bDirtyContext = 0x0000000000000000
bstat2 = 0x0                        

PAGE HEADER:


Page @0x0000004DF03E8000

m_pageId = (49:8125916)             m_headerVersion = 1                 m_type = 3
m_typeFlagBits = 0x0                m_level = 0                         m_flagBits = 0xa200
m_objId (AllocUnitId.idObj) = 10814647                                   m_indexId (AllocUnitId.idInd) = 256
Metadata: AllocUnitId = 72058302786633728                                
Metadata: PartitionId = 72058370492596224                                Metadata: IndexId = 1
Metadata: ObjectId = 1916450641     m_prevPage = (0:0)                  m_nextPage = (0:0)
pminlen = 0                         m_slotCnt = 2                       m_freeCnt = 2452
m_freeData = 5764                   m_reservedCnt = 0                   m_lsn = (2455108:11140830:20)
m_xactReserved = 0                  m_xdesId = (28:447547798)           m_ghostRecCnt = 0
m_tornBits = 31453216               DB Frag ID = 1                      

Allocation Status

GAM (49:7668480) = ALLOCATED        SGAM (49:7668481) = NOT ALLOCATED   
PFS (49:8120352) = 0x42 ALLOCATED  80_PCT_FULL                           DIFF (49:7668486) = CHANGED
ML (49:7668487) = NOT MIN_LOGGED    


DBCC execution completed. If DBCC printed error messages, contact your system administrator.

DBCC CHECKFILEGROUP 当前正在运行。完成没有错误。

SeanGallardy 评论了二进制数。我花了很长时间才明白他的意思,但我终于在程序员模式下在 Windows 计算器中输入了这两个数字,它显示的内容如下: 红色显示差异

更新:我们进行了另一次备份并从旧服务器恢复到新服务器。这次我们收到了这样的信息:

Could not redo log record (2456609:4261461:64), for transaction ID (28:972770238), on page (48:211577379), allocation unit 72058359886184448, database 'DataWarehouse' (database ID 7). 
Page: LSN = (2456609:3279166:236), allocation unit = 72058351460417536, type = 20. Log: OpCode = 2, context 5, PrevPageLSN: (2456609:4250688:2). 
Restore from a backup of the database, or repair the database.

我试图用谷歌搜索这条消息,但我能找到的唯一建议是恢复数据库(这是我想要做的)。

真正的问题是;接下来我该怎么办?

sql-server restore
  • 1 个回答
  • 6136 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-11-26 06:34:18 +0800 CST

SSMS Intellisense 垃圾邮件错误日志

  • 1

我在我们的错误日志中看到了数千行关于登录失败的信息:

错误:18456,严重性:14,状态:38
。用户“Ourcompany\myaccount”登录失败。
原因:无法打开明确指定的数据库“mydatabase”。[客户:10.nn.nn.nn]

我们的一些用户无法访问服务器上的所有数据库。当我在SSMS -> Tools -> Options -> Text editor -> Transact-SQL -> IntelliSense中关闭 Intellisense 时,垃圾邮件停止发送。

这是 SSMS 中的错误吗?
有没有办法解决它(除了授予对所有数据库的访问权限)?

sql-server ssms
  • 2 个回答
  • 384 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-11-26 01:50:51 +0800 CST

按 1 排序将结果集缩短为一行

  • 3

我正在运行以下查询:

DECLARE @sql NVARCHAR(max) = N''
SELECT @sql += N' EXEC dbo.DoSomething @Tablename = ''' + SCHEMA_NAME(T.schema_id) + N'.' + T.name + N''''
--SELECT * 
FROM sys.tables T
INNER JOIN sys.indexes I ON I.object_id = T.object_id
ORDER by 1 
PRINT  @sql

但我只打印了一行。如果我取出这ORDER by 1条线,或者用它替换它,
ORDER BY t.name我就会得到预期的结果。

这是 SQL Server 中的错误吗?
我已经在 SQL SErver 2016 SP1 和 2014 Sp2-Cu1 上试过了。

sql-server sql-server-2016
  • 1 个回答
  • 191 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-11-19 02:25:42 +0800 CST

database_scoped_configurations 中的错误

  • 10

我正在尝试从以下位置插入结果集:

SELECT * FROM sys.database_scoped_configurations

到临时表中,因为我想检查服务器上所有数据库的设置。所以我写了这段代码:

DROP TABLE IF EXISTS #h
CREATE TABLE #h(dbname sysname, configuration_id INT, name sysname,     value SQL_VARIANT,  value_for_secondary SQL_VARIANT)
EXEC sys.sp_MSforeachdb 'USE ?; insert into #h(dbname, configuration_id, name, value,value_for_secondary)  SELECT ''?'' as dbname, * FROM sys.database_scoped_configurations  D'
SELECT * FROM #h H

但是每个数据库只有一行,而不是我期望在每个数据库中运行普通选择的四行。

我知道有比使用 sp_MSForEachDB 更好的编码方法,我尝试了几种方法。但是每个数据库我仍然只得到一行。我在 SQL Server 2016 RTM 和 SP1 上都试过了

这是 SQL Server 2016 的错误,还是我做错了什么?

sql-server configuration
  • 4 个回答
  • 553 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-11-05 07:09:15 +0800 CST

stats_date 为空 [重复]

  • 2
这个问题在这里已经有了答案:
增量更新后统计信息消失 (1 个回答)
5 年前关闭。

如果我在我们的系统上运行这个查询:

SELECT STATS_DATE(t.object_id, s.stats_id) AS stdate, * 
from    sys.stats s WITH (NOLOCK)
INNER JOIN sys.tables t WITH (NOLOCK) ON t.object_id = s.object_id
WHERE t.name LIKE 'mytable%'

我有时会看到该stats_date函数返回 NULL。根据 BOL,这应该是不可能的,除非出现错误。它没有说明是哪个错误。

该表相当大,有 110 亿行。如果我跑:

UPDATE STATISTICS fct.mytable ( pk_mytable)

stats_date再次返回为不为空。

为什么日期为空,我该如何防止这种情况发生?

只有主键的统计数据为 NULL。

如果我跑:

DBCC SHOW_STATISTICS ('fct.MyTable', 'IX_MyTableID') 

它返回了我期望的 3 个结果集。如果我跑:

DBCC SHOW_STATISTICS ('fct.MyTable', 'PK_MyTable') 

它返回:

在此处输入图像描述

sql-server sql-server-2016
  • 1 个回答
  • 1153 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-08-13 05:40:03 +0800 CST

ALTER DATABASE MODIFY FILEGROUP [myfilegroup] AUTOGROW_ALL_FILES

  • 5

我想将我数据库中的所有文件组更改为 AutoGrow_all_Files,但前提是它当前是 AutoGrow_Single_File,如下所示:

ALTER DATABASE mydatabase MODIFY FILEGROUP [myfilegroup] AUTOGROW_ALL_FILES

如何检查此数据库属性?

sql-server sql-server-2016
  • 6 个回答
  • 3798 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-08-06 03:00:29 +0800 CST

SQL Server 2016 上的跟踪标志 10260

  • 2

我们的 SQL Server 2016 开发服务器在启动时设置了跟踪标志 10260。其他运行 SQL Server 2016 的服务器则没有。
我到处搜索,但找不到有关该主题的任何信息。

这个跟踪标志有什么作用?

移除是否安全?

sql-server-2016 trace-flags
  • 1 个回答
  • 94 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-06-09 01:06:39 +0800 CST

使用 FileTable 恢复数据库

  • 7

我们有一个 SQL Server 2014 (build 12.0.24457.0) 数据库,里面有两个表,都是 FileStream 表,最大的有 2979466 行,SUM(cached_file_size)= 40564905472.

我们已经尝试将这个数据库恢复到我们的测试服务器上,但是需要相当长的时间。我们的 DBA 在 14 天后放弃了。

有没有其他人尝试过使用 FileStream 表恢复数据库,其中包含更多文件?

我正在运行这个脚本来监控进度:

BEGIN TRY
    DROP TABLE #h 
END TRY
BEGIN CATCH
END CATCH

DECLARE @r INT=1, @percent_complete NUMERIC(9,2), @Extimated_Completion_Datetime DATETIME2(0)
CREATE TABLE #h ( start_time DATETIME2(0), percent_complete NUMERIC(9,2), Estimated_completion_time NUMERIC(9,2), HoursSinceStart NUMERIC(9,2), Extimated_Completion_Datetime DATETIME2(0), session_id INT, created_date datetime2(0))
DECLARE @d VARCHAR(19) , @e VARCHAR(max)


WHILE @r > 0 BEGIN 
    INSERT INTO #h
    SELECT start_time, percent_complete, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)) AS Estimated_completion_time
    , CAST(ROUND(total_elapsed_time/3600000.0,1) AS DECIMAL(9,1)) AS HoursSinceStart
    , DATEADD(HOUR, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)), GETDATE()) AS Extimated_Completion_Datetime
    , session_id
    , GETDATE()
    FROM
    sys.dm_exec_requests AS r
    WHERE
    r.session_id <> @@SPID
    AND r.session_id > 50
    AND command LIKE 'restore database'
    SELECT @r = @@ROWCOUNT

    select top 1 @percent_complete=percent_complete, @Extimated_Completion_Datetime=Extimated_Completion_Datetime from  #h ORDER BY created_date DESC
    SET @d = CONVERT(VARCHAR(19), @Extimated_Completion_Datetime, 121) 
    SET @e = CONVERT(VARCHAR(19), GETDATE(), 121) + ' we are ' + LTRIM(@percent_complete) + '% complete. We estimate to finish at: ' + @d
    RAISERROR('At %s ', 10, 1, @e) WITH NOWAIT


    --WAITFOR DELAY '00:00:10'
    WAITFOR DELAY '00:01:00'
END

到目前为止,我得到了这个结果:

在 2016-06-08 10:35:46,我们完成了 00.01%。
在 2016-06-08 14:22:46,我们完成了 39.26%。我们预计结束时间:2016-06-08 18:22:47
在 2016-06-08 14:23:46,我们完成了 39.27%。我们预计结束时间:2016-06-08 18:23:47
在 2016-06-08 14:24:46,我们完成了 39.28%。我们预计结束时间:2016-06-08 18:24:47
...
在 2016-06-09 08:33:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:33:08
在 2016-06-09 08:34:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:34:08
在 2016-06-09 08:35:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:35:08
在 2016-06-09 08:36:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:36:08
在 2016-06-09 08:37:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:37:08
在 2016-06-09 08:38:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:38:08
在 2016-06-09 08:39:07,我们完成了 44.82%。我们预计结束时间:2016-06-10 09:39:08
...
在 2016-06-10 08:12:01,我们完成了 47.86%。我们预计结束时间:2016-06-12 08:12:02
在 2016-06-10 08:13:01,我们完成了 47.86%。我们预计结束时间:2016-06-12 08:13:02

不完全快。它已在 13:45 内成功地从 42% 上升到 45%,因此按照目前的速度,它看起来将在 2016-06-27 13:45 或 18 天内完成。44 GB!

SELECT top 10000 resource_description AS resource_description, * 
FROM sys.dm_os_waiting_tasks
WHERE session_id=64

说:

等待类型=BACKUPTHREAD

...有时BACKUPIO也是

所以我设置了另一个恢复来获取恢复消息:

DBCC TRACEON(3604, 3605, 3014);
RESTORE DATABASE [VDCFileStreamhespotest] FROM  DISK = N'\\dkrdsvdcp19\MSSQL_Backup\Full\Misc\VDCFileStream_backup_2016_06_07_180004_7123139.bak' WITH  FILE = 1,  
NOUNLOAD,  REPLACE,  STATS = 1
, move 'VDCFileStream'      to 'P:\MSSQL\DPA\System\MSSQL10_50.DPA\MSSQL\DATA\UserDBs\VDCFileStream\VDCFileStreamDBhespo.mdf'
, MOVE 'VDCFileStream_log'  to 'P:\MSSQL\DPA\Log\Log02\VDCFileStream\VDCFileStreamDBhespo_log.ldf'
, MOVE 'VDCFileStreamF1'    to 'G:\VDCFileStream\FileStreamDatahespo'
恢复(VDCFileStreamhespotest):RESTORE DATABASE 已启动
Restore(VDCFileStreamhespotest):打开备份集
Restore(VDCFileStreamhespotest):处理前导元数据
恢复(VDCFileStreamhespotest):计划开始
备份/恢复缓冲区配置参数
内存限制:32767 MB
缓冲区数:6
缓冲器组:2
最大传输大小:1024 KB
最小最大传输大小:1024 KB
总缓冲区空间:12 MB
表格数据设备数:1
全文数据设备数:0
文件流设备数:1
TXF 设备数:0
文件系统 i/o 对齐:512
媒体缓冲区数:6
媒体缓冲区大小:1024 KB
编码缓冲区数:6
Restore(VDCFileStreamhespotest): 有效选项:Checksum=1, Compression=1, Encryption=0, BufferCount=6, MaxTransferSize=1024 KB
Restore(VDCFileStreamhespotest):规划完成
恢复(VDCFileStreamhespotest):开始离线恢复
恢复(VDCFileStreamhespotest):附加数据库为 DB_ID = 48
恢复(VDCFileStreamhespotest):准备容器
Restore(VDCFileStreamhespotest):容器准备就绪
Restore(VDCFileStreamhespotest):恢复备份集
恢复(VDCFileStreamhespotest):估计要传输的总大小 = 45540792320 字节
恢复(VDCFileStreamhespotest):传输数据
1% 已处理。

5 天后,我们已经完成了一半:但接下来的旅程会很漫长

sql-server sql-server-2014
  • 2 个回答
  • 702 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-04-13 05:12:34 +0800 CST

如何获得估计的子树成本?

  • 7

如果我有一个返回 query_plan 的查询,例如这样:

    SELECT TOP 1000 st.TEXT
    ,cp.size_in_bytes
    ,cp.plan_handle
    ,QP.query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS QP
WHERE cp.objtype = N'Adhoc'
    AND cp.usecounts = 1

然后我可以单击 query_plan 并将鼠标悬停在最左侧的图标上,其中提示文本将列出估计的子树成本。

有没有办法将它Estimated Subtree Cost作为我的查询的单独列?

我知道这个数字是无单位的,并且是指大约 20 年前的特定开发人员 PC。即便如此,我认为如果统计数据不是太远,它可能会告诉我查询需要多长时间。

我已经非常努力地向 Google 搜索此信息,但即使 dba.stackexchange.com 也是空的。

sql-server sql-server-2014
  • 2 个回答
  • 1586 Views
Martin Hope
Henrik Staun Poulsen
Asked: 2016-01-08 23:47:19 +0800 CST

sp_Blitz 在 MDS 数据库上说“页面验证不是最佳的”

  • 5

我在我们的测试数据库服务器上运行了 sp_blitz(版本 45)。它抱怨

数据库 [MDS] 具有用于页面验证的 TORN_PAGE_DETECTION。SQL Server 可能更难识别存储损坏并从中恢复。考虑改用 CHECKSUM。

但这是微软的数据库。
将 Page Verification 改为 CheckSum 是否明智?

还是应该等待微软发布新版本的 MDS?

sql-server sp-blitz
  • 1 个回答
  • 910 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve