我的笔记本电脑上安装了 SSMS 2012,主机上安装了 SQL Server 2012,但是当我尝试安排 sql 作业时,我没有在左侧列表中找到“SQL Server 代理”!!?
我们有一个带有 15 个数据库的 SQL Server。这被每个数据库中的许多用户同时使用。最近,我们开始从该服务器收到高 CPU 警报。当警报出现时,我可以跟踪到确切的用户和查询。
我们无法在此服务器上打开 SQL Server Profiler。我想知道我们是否可以使用任何脚本获取有关在任何数据库(导致高 CPU)中运行的历史昂贵查询的信息。例如 - 我需要过去 4 小时内最昂贵的查询以及数据库名称和用户名。
我们有一个包含以下列的 PriceCombo 表:id(非空)、a_id(空)、b_id(空)、c_id(空)、折扣(非空)。我们正在使用此表来确定分配各种商品组合的价格。
a_id = id of region
b_id = id of merchandize category
c_id = id of customer category
Run Code Online (Sandbox Code Playgroud)
所以基本上,我们总是知道 a、b 和 c,但我们有一个灵活的折扣方案,这样每笔销售都按照我们能找到的最具体的规则进行折扣。
我们的问题是我们无法防止数据库中的重复,例如,我们希望防止在 a_id、b_id 和 c_id 中具有相同值的两行
a_id=1, b_id=1, c_id=1 and
a_id=1, b_id=1, c_id=1
Run Code Online (Sandbox Code Playgroud)
不被允许和
a_id=1, b_id=1, c_id=null and
a_id=1, b_id=1, c_id=null
Run Code Online (Sandbox Code Playgroud)
不被允许,但
a_id=1, b_id=1, c_id=null and
a_id=1, b_id=null, c_id=null
Run Code Online (Sandbox Code Playgroud)
是允许的,因为这些在这 3 列方面不相同。
我在任何地方都没有找到关于如何创建唯一约束的答案,该约束既跨越多列又允许空值但不允许“相同”(至少在约束中指定的列方面)行
我给出了两个表格的简化版本,如下所示。
表记录
ID unit val
--- --- ---
1 KV 3
1 BAR 4
2 KV 7
2 KG 5
3 C 37
Run Code Online (Sandbox Code Playgroud)
表单位
unit convUnit formula
--- --- ---
KV CV @val * .865
KG lbs @val / 2.205
BAR PSI @val / 14.504
C F @val * 9/5 + 32
Run Code Online (Sandbox Code Playgroud)
我将无法更改表结构。
我知道哪个单位将转换为哪个单位(即我知道 KV 将转换为 CV,KG 将转换为磅等..)。
请注意,公式是一varchar列,我从表格tblRecords.unit中引用了tblUnit.unit
但我的问题是如何在单个查询中动态计算公式。即我想要以下输出。
ID unit val convVal(column will be counted on the fly using formula stored in tblUnit.formula …Run Code Online (Sandbox Code Playgroud) 在关注 BrentOzar 的“索引重建期间离线多少? ”时,我很好奇运行:
SELECT Quantity FROM [Production].[TransactionHistory] WITH(NOLOCK)
Run Code Online (Sandbox Code Playgroud)
在执行上述文章中的重建时,观察到它被延迟,直到索引重建完成
什么是阻塞SELECT ... WITH(NO LOCK)以及如何避免它?
更新:
Windows NT 6.1 上
的 Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
企业评估版(64 位)(内部版本 7601:Service Pack 1)
我有一台带有以下内容的 SQL Server 机器:
我将最大服务器内存使用量设置为我认为可接受的值(合计约 10GB,为 Windows 留出 2GB)。我使用以下查询来显示缓冲池和非缓冲池的总 RAM 使用量。我还展示了 MAX SERVER MEMORY 设置。每个实例上的数据库都比分配的 RAM 大得多,即使有几个实例比其他实例得到了更多的使用。实际使用的内存不应该总是非常接近 MAX SERVER MEMORY 设置吗?我发现了一个让我好奇的差距。
DECLARE @TotalRam as decimal (10,2)
--NON-BUFFER POOL
SET @TotalRam = (SELECT sum(pages_allocated_count)/128.0 [Non-Buffer (MB)]
from sys.dm_os_memory_cache_entries
where pages_allocated_count > 0)
--BUFFER POOL
SET @TotalRam = @TotalRam + (
SELECT CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2)) AS [Buffer Pool …Run Code Online (Sandbox Code Playgroud) 我有一个 1 GB.LDF的测试数据库,我想将其缩小。如果需要,我很乐意删除其内容。
如何为 SQL Server 2000 执行此操作?
我尝试了以下方法但无济于事:
BACKUP LOG Database_TEST with truncate_only
DBCC SHRINKFILE (Database_TEST_Log, 1000)
Run Code Online (Sandbox Code Playgroud) 我不经常使用数据库,我想确保我以正确的方式处理这个问题。
我想将数据库的文件大小配置为不超过 9 个演出。当数据库达到此文件大小限制时,我希望它清除 25%% 的最旧记录以容纳新记录。
这是我可以/应该在数据库服务器本身上配置的东西,比如一次性最大设置配置,还是必须由更新数据库的程序来处理(它会检查容量并告诉它何时清除记录)。
我不是 DBA,所以我不确定这通常是如何处理的。
RCSI(读提交快照隔离)是更改 SQL Server 中(默认)读提交隔离级别行为的数据库设置。
据我了解,这是 MSDN 博客文章“并发系列:最小化更新程序之间的阻塞”中的 sripts 的上下文,它告诉我们:
“使用 RCSI 的第二个技巧也不起作用,并且更新被行上的 session-1 阻塞在 X 锁后面,(C1 = 1)。原因是以下 UPDATE 语句在比读取提交更高的隔离级别执行。
update basic_locking set c2 = 1000 where c1 = 2
这是显示阻塞的输出

解决方案:这里有两个选择来解决这个问题:”
“输出”如何说明隐式默认隔离级别(已提交读)的隐式提升?
如何在某些语句的上下文中检查真正的隔离级别“跳跃”?
什么时候期待它们,它们为什么会发生?
使用fn_dblog我可以获得我的数据库的在线事务日志的活动部分。
但是在每个检查点之后,我只能看到 2 个条目显示检查点的开始和检查点LOP_BEGIN_CKPT的结束LOP_END_CKPT。
我想知道之前的日志是在每个检查点之后删除还是只是因为dbi_checkptLSN位于引导页面中的值指示最新的 LSN而被忽略?
如果dbi_checkptLSN是我能够移动该指标的结果,如果是,如何移动?
如果没有,并且没有删除日志,我如何访问以前的日志?
sql-server ×10
checkpoint ×1
concurrency ×1
constraint ×1
index ×1
index-tuning ×1
locking ×1
memory ×1
profiler ×1
ssms ×1
t-sql ×1
transaction ×1