我每 5 分钟从 sys.dm_io_virtual_file_stats 收集 IO_STALLS,然后进行增量以查看哪些文件受 IO 影响最大。
在一个 5 分钟的时间内,我得到了 5826331 毫秒的增量,即 97 分钟。
我对此有点困惑,这是说 97 分钟前开始的操作仅在那时完成并因此记录了等待时间?
谢谢
根据要求添加代码:
/*
USE [SysDBA]
GO
*/
/****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/
/*
DROP TABLE [dbo].[DISKIOPS]
GO
*/
--Create the table
/****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/
/*
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[DISKIOPS](
[IO_STALL] [bigint] NULL,
[IO_STALL_READ_MS] [bigint] NULL,
[IO_STALL_WRITE_MS] [bigint] NULL,
[NUM_OF_READS] [bigint] NULL, …Run Code Online (Sandbox Code Playgroud) 我创建了一个接受开始和结束日期的函数,结束日期是可选的。然后我CASE在过滤器中写了一个,如果没有通过结束日期,则使用开始日期。
CASE WHEN @dateEnd IS NULL
THEN @dateStart
ELSE @dateEnd
END
Run Code Online (Sandbox Code Playgroud)
当我为最近一个月的数据调用函数时:
SELECT * FROM theFunction ('2013-06-01', NULL)
Run Code Online (Sandbox Code Playgroud)
...查询挂起。如果我指定结束日期:
SELECT * FROM theFunction ('2013-06-01', '2013-06-01')
Run Code Online (Sandbox Code Playgroud)
... 结果正常返回。我从函数中取出代码并在查询窗口中正常运行。我也不能复制小提琴的问题。像这样的查询:
SELECT * FROM theFunction ('2013-04-01', '2013-06-01')
Run Code Online (Sandbox Code Playgroud)
...也工作正常。
查询(下面)中是否有任何内容可能导致函数NULL在结束日期传递时挂起?
在 SQL Server 中,有很多跟踪标志。为什么其中一些需要关闭。在某些地方我看到需要关闭跟踪标志 8017。所以我想知道需要关闭哪个跟踪标志,为什么?
我对 TABLESAMPLE 的使用的理解是它返回结果集中前 n% 的行,其中 TABLESAMPLE(n)
所以我写了以下查询来检查(因为我正在学习 T-SQL)
SELECT FirstName,
MiddleName,
LastName
FROM Person.Person TABLESAMPLE(10)
SELECT FirstName,
MiddleName,
LastName
FROM Person.Person TABLESAMPLE(10 PERCENT)
Run Code Online (Sandbox Code Playgroud)
每次执行查询时,每个查询都会返回不同数量的行。
所以我显然不理解TABLESAMPLE。有人能解释一下吗?
在解决将断开连接的设备与中央数据库服务器同步的问题时,我们在服务器上升级到 SQL Server 2012 后遇到了问题。看起来 CHANGE_TRACKING_MIN_VALID_VERSION 返回的值比它应有的值高 1(或至少比升级前的值高)。
我一直在研究如何设置简单示例的Arshad Ali 的精彩示例。
我已经运行了从 #1 到 #5 的脚本,以在 SQL Server 2008 和 2012 环境中的 Employee 表中插入、删除和更新一行。
在 2008 年,以下语句返回 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Run Code Online (Sandbox Code Playgroud)
在 2012 年,它返回 1。
在测试中通过更多脚本 (6-8) 工作时,我将保留期设置为 1 分钟,以期强制执行清理操作。我离开了一天,显然它运行了一夜。
在 2008 年的实例中,CHANGE_TRACKING_CURRENT_VERSION 和 CHANGE_TRACKING_MIN_VALID_VERSION 是相等的 (11)。在 2012 年的实例中,CHANGE_TRACKING_MIN_VALID_VERSION 比 CHANGE_TRACKING_CURRENT_VERSION (11) 高一 (12)。当数据库长时间空闲时,这可能会对同步过程产生影响。我们发现进程可能会陷入循环,尤其是在执行以下测试以确定是否需要重新初始化而不是同步时:
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor
RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这种行为变化?有人有解释吗?
我在 SQL Server 2008 上有一个数据库,我想删除它。目前它处于单用户模式并且正在使用中。
select * from sys.sysprocesses
Run Code Online (Sandbox Code Playgroud)
返回
Msg 924, Level 14, State 1, Line 1
Database 'G_MAIN_DE' is already open and can only have one user at a time.
Run Code Online (Sandbox Code Playgroud)
我不知道如何识别我必须杀死的会话。
尝试将其设置为离线
ALTER DATABASE G_MAIN_DE SET OFFLINE WITH ROLLBACK IMMEDIATE
Run Code Online (Sandbox Code Playgroud)
产量
Msg 5064, Level 16, State 1, Line 1
Changes to the state or options of database 'G_MAIN_DE' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it. …Run Code Online (Sandbox Code Playgroud) 背景资料:
SYSTEM_USER在触发器中调用时,结果总是相同的。UserId每次完成 DML 时都会为其提供一个字符串(仅在存储过程中完成)。我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,我不想看到所有操作都是由服务完成的,我想看看是哪个用户完成的。这不是更新的问题,因为我们有ModifiedBy将通过发送的UserId更新来更新的列。
问题是:有没有办法在SYSTEM_USER运行删除时设置或以其他方式将用户信息放入触发器中?
我现在拥有的“最佳”想法,虽然我不确定这是否是一个好主意,但在服务中,我检查当前UserId是否以用户身份存在于数据库中,如果没有,则创建一个用户为他们反对。然后运行存储过程EXECUTE AS User = @UserId。然后当 DML 在存储过程中完成并且触发器触发时,SYSTEM_USER应该从EXECUTE AS.
我想使用可以容纳超过 19 位数字的数据类型。那么是否有任何可用的数据类型可以容纳大于 19 位的数字?
我有一个通过 SQL Server 代理(运行 SQL Server 2012 Enterprise)运行的 SQL 作业。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在文件夹的名称(文件夹是版本号),所以我使用 PowerShell 来查找它:
set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
Run Code Online (Sandbox Code Playgroud)
如果我在 SQL Server 上打开一个 PowerShell 窗口,那么它工作正常。当我在 SQL Server 代理中运行它时,出现以下错误:
A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
Run Code Online (Sandbox Code Playgroud)
我认为这可能是权限问题,所以我尝试在我的凭据下运行 SQL Server 代理(它是测试服务器,而不是生产服务器),但我仍然遇到相同的错误。我还尝试将网络驱动器映射到共享文件夹而不是 UNC 路径,但出现相同的错误。
谁能建议我如何连接到这个文件夹?
我已经编写了一个脚本来测试在这个页面http://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx中标题为 Summarizing Minimal Logging conditions about when最小日志记录发生或不发生。
使用此脚本,我发现每种不同类型插入的日志记录长度总和如下:
其中一些数字似乎与 technet 页面上的表格不符。特别是:
作为参考,这是在 SQL express 数据库上运行的,当我运行 DBCC TRACESTATUS (610) …
sql-server ×10
performance ×2
audit ×1
bulk-insert ×1
datatypes ×1
jobs ×1
maintenance ×1
powershell ×1
t-sql ×1
trace ×1
trigger ×1
users ×1