好吧,我觉得这是一个糟糕的主意,但我需要一些帮助来理解为什么这很糟糕:
我仍在努力为我们的数据中心实施灾难恢复/业务连续性解决方案。我们正在运行 MSSQL 2008 Enterprise,我们计划在云中运行一个被动实例。目前我建议使用 Log Shipping,但我被要求探索使用 RSync(或类似的东西)将 MDF/LDF 文件增量推送到云,而不是使用内部工具。
目标是减少我们的占用空间,并且由于许可问题,大部分时间不运行云 SQL 实例(我们的被动/DR 许可证已在我们当前的数据中心中使用,但如果该中心出现故障,则该许可证可用) .
我找到了一个使用 VSS 创建和推送增量的解决方案,即使文件被锁定,但我想知道会出现什么样的问题。我可以得到一些见解吗?我们将每 15 分钟推送一次增量,有问题的数据库大约为 2GB,在 15 分钟的窗口中可能会生成 10 MB 的 T-Log。
我在 MSSQL 课上教过,这是如何连接两个表
Run Code Online (Sandbox Code Playgroud)select * from FirstTable A JOIN SecondTable B on A.ID= B.ID
现在在我的职业生涯中,我遇到过这样的 JOIN 查询
Run Code Online (Sandbox Code Playgroud)select * from FirstTable A, SecondTable B where A.ID=B.ID
我知道第二种选择曾经是常态,但现在可能已经放弃了。
我发现在我加入 6+ 个表 + 有多个子查询的复杂查询中,第二种形式更容易理解,而且简短漂亮。
问题
多亏了一些很棒的帖子,我已经成功地在客户的 SQL Server 实例上启动了一些服务器端跟踪,但由于这确实是我在“现实生活”情况下的第一次,我想知道一些事情。
1) 我在创建跟踪的脚本中定义了跟踪文件的“基本”名称。我每天早上 6 点开始跟踪并在晚上 7 点再次关闭它。我真正想做的是将跟踪文件的基本名称设置为包含日期,例如,我希望将其设为
(some directory)\MyTrace-2012-Apr-19
Run Code Online (Sandbox Code Playgroud)
等等 - 这样每天的跟踪文件将很容易识别。有没有办法实现这一目标?我是否必须每天实际创建和删除跟踪才能得到这个??
2) 如果我每天打开和关闭跟踪,我昨天 ( MyTrace.trc) 的跟踪文件今天会被重用,直到它定义的最大大小吗?或者 SQL Server 会在每天启动时创建一个新的跟踪文件 ( MyTrace_1.trc, MyTrace_2.trc) 吗?
3)此外,即使在晚上 7 点之后,我也无法尝试获取该跟踪文件 - 似乎它仍然被某个进程锁定,我不能将它复制到其他地方......我假设一旦跟踪停止,文件将“免费”可用 - 我错了吗?
如果有人可以帮助我理解为什么以下交易陷入僵局?我为每个表提供 2 个事务和索引:
交易1:
SELECT blockId, blockData, syncedToGeneration, itemId
FROM blocks
WHERE indexId=@indexId
and itemId IN (SELECT itemId
FROM KeywordReferences
WHERE indexId=@indexId
AND keywordRootId IN (360,4498,359,1229))
Run Code Online (Sandbox Code Playgroud)
交易2:
UPDATE blocks
SET blockData=@blockData,
syncedToGeneration=@syncedToGeneration
WHERE indexId=@indexId
AND blockId=@blockId
Run Code Online (Sandbox Code Playgroud)
(请注意,第一笔交易中的“IN”部分要长得多,包含大约 30 个值,为了便于阅读,我将其截断了)
blocks 表有以下索引:
- indexId->blockId (Clustered)
- indexId->itemId
indexId->itemId
keywordReferences 表具有以下索引:
- indexId_>keywordRootId (Clustered)
- indexId->keywordRootId->score
- indexId->itemId
- indexId->blockId
波纹管是死锁图xml输出:
<deadlock-list>
<deadlock victim="process5a274c8">
<process-list>
<process id="process5a274c8" taskpriority="0" logused="0" waitresource="PAGE: 5:1:91671" waittime="2709" ownerId="122348" transactionname="SELECT" lasttranstarted="2012-04-19T21:23:26.680" XDES="0xf382aca0" lockMode="S" schedulerid="4" kpid="10992" status="suspended" spid="69" sbid="0" …Run Code Online (Sandbox Code Playgroud) 在 SQL Server 中,我有一个 varchar 列,其值例如:
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
Run Code Online (Sandbox Code Playgroud)
我有一个从列中解析字符串值的查询:
SELECT left(DateTimeSent, 17) AS timesent FROM allog_07_11_e query1
Run Code Online (Sandbox Code Playgroud)
当我做:
SELECT left(DateTimeSent, 17) AS timesent FROM allog_07_11_e query1.timesent != '0'
Run Code Online (Sandbox Code Playgroud)
我得到:
Msg 207, Level 16, State 1, Line 1
Invalid column name 'timesent'.
Run Code Online (Sandbox Code Playgroud)
任何想法为什么?
我有一个开发用户,他需要能够在单个数据库上使用 SQL Profiler。有没有办法在不授予服务器范围的 ALTER TRACE 权限的情况下启用它?(用户根本不应该拥有对其他数据库的任何访问权限。)这是 Microsoft SQL Server 2008 R2。
“缓冲区管理器:页面写入数/秒”(* 8 KB)是否是通过可用性组复制所有数据库将使用多少带宽的良好指标?
如果不是,为什么这些不等价?只是有一些开销还是它们基本上不相关?
不久前,我问了一个关于如何使开始对话框和发送更灵活的问题,以便它可以嵌入到将 to、from 参数作为 sysname 变量的过程中。
多个发起者将使用的服务代理程序开始对话对话..如何将参数传递给它
然而,正如 Rusanu 在回答中提到的,同样的技术不能用于接收的 From 子句。
实际上它会起作用。大多数 SSB 动词都接受参数作为参数(当然,RECEIVE 的队列名称除外)。参数的类型为 sysname ...
实际上发送方已经完成,我现在试图以同样的方式使接收变得灵活,例如:
CREATE PROCEDURE QueueReceive
@myTargetQueue SYSNAME
@cg UNIQUEIDENTIFIER OUTPUT
@ch UNIQUEIDENTIFIER OUTPUT
@msg XML OUTPUT
as
BEGIN TRANSACTION;
WAITFOR
( RECEIVE TOP(1)
@cg = conversation_group_id,
@msg = cast(message_body as XML),
@ch= conversation_handle
FROM @myTargetQueue
), TIMEOUT 3000;
COMMIT
...
Run Code Online (Sandbox Code Playgroud)
似乎不能在 RECEIVE 的 from 子句中使用 sysname 类型的变量?如果我必须在动态 SQL 中执行此操作,我将如何从接收函数的动态 sql 执行中返回所有变量、conversation_group_id、conversation_handle 等?有没有更好的技术来完成同样的事情?
谢谢你。
修复/更新到目前为止:我正在创建一堆 IF 子句,具体取决于传递的参数是什么,它只会执行不同的整个接收语句。它效率不高,因为我每次添加新 QUEUE 时都必须更改过程代码,但我想现在可以了...
是否在 SQL 2008 r2 上运行 UPDATE Statistics 并对 5000 万行(非分区)的大表进行全面扫描?我正在尝试确认以下行为。
a) 在整个运行过程中是否有任何锁定?不确定,但我认为没有锁,但是 sr。dba 告诉我它需要模式修改锁(嗯...)
b) 导致阻塞——我不这么认为
c) 造成大量 IO——因为每一页都将被读入内存并污染数据页缓冲区缓存。所以通常你应该在下班时间这样做。
sql-server-2008 ×10
sql-server ×8
backup ×1
datetime ×1
deadlock ×1
dynamic-sql ×1
join ×1
perfmon ×1
profiler ×1
recovery ×1
trace ×1
transaction ×1