我希望您对此提出意见。我有一个 sql server 2008r2 Ent。埃德。64 位,16 核和 64GB RAM。截至 20111014,有一个 SQL Server 实例已完全修补。
最大内存设置为 60000MB。在线几天后根据任务管理器的可用内存量为 0。
如果我将最大内存更改为 53GB 以下,它会在几天后稳定下来并有一些可用内存。
根据任务管理器分配内存的是sql进程。我如何接受问题的真正含义?不用说,我已经做了很多测试,但还没有按照我的喜好解决这个问题。哦,当可用内存降至 0 空闲时,我们不会出现典型的内存饥饿滞后。
更新 1:
受到本页https://dba.stackexchange.com/a/7062/2744上另一个与 RAM 相关的 Q/A 的启发。我使用这两个来查看 RAM 的用途。
SELECT TOP ( 10 )
[type] AS [Memory Clerk Type] ,
SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION ( RECOMPILE ) ;
SELECT DB_NAME(database_id) AS [Database Name] ,
COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors …Run Code Online (Sandbox Code Playgroud) 是否可以创建数据库别名或同义词?我希望能够做的是将 NewDatabaseName 别名为 OldDatabaseName 以防止不得不重写大量代码。
背景故事:一位客户向我提出了一个荒谬的自我引发的问题。他们有一个带有 SQL 服务器后端的第三方应用程序。用户一直在使用 Visual Basic 编写针对该数据库的自定义报告,所有数据库连接信息都硬编码在他们的程序中。
最近第三方软件重命名了他们的数据库。现在所有的报告 EXE 都失败了。
哦,他们也没有很多源代码。
我忍住笑声,说我会看看我能做些什么。
查询:
SELECT
name AS TableName,
create_date AS CreatedDate,
modify_date as ModifyDate
FROM sys.tables
order by ModifyDate;
Run Code Online (Sandbox Code Playgroud)
...将告诉我上次创建和修改表的时间(从 DDL 的角度)。但我想知道上次从表中插入或删除实际数据的时间。是否可以在 SQL Server 中获得它?
我试图找出一个简单的查询,我可以做一个简单的查询来测试一个大表是否有一个条目列表,在任何列中至少有一个空白(NULL/空)值。
我需要类似的东西
SELECT * FROM table AS t WHERE ANY(t.* IS NULL)
Run Code Online (Sandbox Code Playgroud)
我不想做
SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL
Run Code Online (Sandbox Code Playgroud)
这将是一个巨大的查询。
每次我决定构建一个立方体时,我都会遇到一个问题,但我还没有找到克服它的方法。
问题是如何允许用户自动定义一系列事物,而无需在维度中对它们进行硬编码。我将在一个例子中解释我的问题。
我有一个叫做客户的表:

这是表中的数据:

我想以枢轴样式显示数据,并将工资和年龄分组在定义的范围内,如下所示:

我写了这个脚本并定义了范围:
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = case
when cast(salary as float) <= 500 then
'0 - 500'
when cast(salary as float) between 501 and 1000 then
'501 - 1000'
when cast(salary as float) between 1001 and 2000 then
'1001 - 2000'
when cast(salary as float) > 2000 then
'2001+'
end,
[AgeRange] = case
when cast(age as float) < 15 then
'below 15'
when cast(age as float) between …Run Code Online (Sandbox Code Playgroud) 我想使用我在 C# CLR 中开发的代码在系统上的所有数据库中使用,这样我就不必将每个数据库都设置为可信赖的并打开 CLR 并在每个数据库中保留一堆相同的代码.
从管理和安全的角度来看,有没有最好的方法来做到这一点?CLR 函数非常基础,如字符串断路器、电子邮件验证、url 编码/解码、base64 等。我希望每个数据库中只有 dbo 模式能够访问这些函数。
谢谢
我一直在通过 sql server 2008 r2 中的数据收集器监视文件增长两周。数据库以大约 35(MB)/天的速度持续增长。数据库尚未达到 2 GB 的初始大小。
DB 文件自动增长设置为 5MB,我想尝试不同的方法,所以我正在寻找建议和/或评论。
每周周日晚上 1:30 有一项调整任务运行。该任务将:
我想在每周调整计划中再添加两个步骤:
通过将增长负担置于离线时间,我希望通过减少重负载期间自动增长事件的数量来提高性能。
我有两个关于自动增长文件的问题。
ALTER DATABASE|MODIFY FILE来增长文件,那么我如何确定SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)?sql-server-2008 sql-server best-practices sql-server-2008-r2 transaction-log
我发现了一个僵局,似乎表明了我认为不可能的事情。死锁涉及两个进程:
1. process8cf948 SPID 63
对临时表 #PB_Cost_Excp_Process_Invoices_Work 执行 ALTER TABLE。
拥有表 #PB_Cost_Excp_Process_Invoices_Work 的 IX 锁,对象 ID 为 455743580
2. process4cb3708 SPID 72
在临时表 #PB_Cost_Excp_Process_Invoices_Work 上执行更新,它应该是它自己唯一的表副本。
在#PB_Cost_Excp_Process_Invoices_Work 上拥有 Sch-M 锁,对象 ID 为 455743580!
这应该是不可能的。我错过了什么吗?#Temporary 表真的在这两个 SPID 之间重用了吗?
这是在 SQL Server 2008 R2 Service Pack 2 和累积更新 1(版本 10.50.4260)上。
完整的未更改死锁跟踪如下。请注意这两个进程如何在具有相同表名的相同对象 ID 上运行 #PB_Cost_Excp_Process_Invoices_Work_SNIP_0000000D8519:
12/14/2012 13:46:03,spid23s,Unknown,waiter id=process8cf948 mode=X requestType=wait
12/14/2012 13:46:03,spid23s,Unknown,waiter-list
12/14/2012 13:46:03,spid23s,Unknown,owner id=process4cb3708 mode=Sch-M
12/14/2012 13:46:03,spid23s,Unknown,owner-list
12/14/2012 13:46:03,spid23s,Unknown,objectlock lockPartition=0 objid=455743580 subresource=FULL dbid=2 objectname=tempdb.dbo.#PB_Cost_Excp_Process_Invoices_Work_________________________________________________________________________________0000000D8519 id=lock371705d00 mode=Sch-M associatedObjectId=455743580
12/14/2012 13:46:03,spid23s,Unknown,waiter id=process4cb3708 mode=Sch-M …Run Code Online (Sandbox Code Playgroud) 我有一个大表(约 5000 万行)我正在尝试批量插入 SQL Server,但出现错误:
无法为数据库“I 3 Stroke”中的对象“myDB”分配空间,因为“PRIMARY”文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
数据库中有另一个表,大约有 2500 万行。该数据库将仅在一台机器上使用,它旨在挖掘已经存在的数据,并且在任何情况下都不会超过其当前大小。
对于这种情况,解决此问题的最佳方法是什么,这样 SQL Server 就不会抱怨?这个数据库不会暴露给多个用户的解决方案是否重要?
我们正在从 SQL 2005 [Instance and DB has collation of SQL_Latin1_General_CP1_CI_AS] 迁移到 SQL 2008 [默认为Latin1_General_CI_AS]。
我完成了 SQL 2008 R2 安装,并使用了默认Latin1_General_CI_AS排序规则,数据库的恢复仍然在SQL_Latin1_General_CP1_CI_AS. 发生了例外的问题 -Latin1_General_CI_AS数据库 所在的 #temp 表, SQL_Latin1_General_CP1_CI_AS这就是我现在所在的位置 - 我现在需要关于陷阱的建议。
在安装 SQL 2008 R2 时,我可以选择在安装时使用'SQL Collation, used for backwards compatibility',我可以选择与 2005 数据库相同的排序规则:SQL_Latin1_General_CP1_CI_AS。
这将使我不会遇到#temp 表的问题,但是有陷阱吗?
如果不使用 SQL 2008 的“当前”归类,我会失去任何功能或特性吗?
我会在某个时候被迫去Latin1_General_CI_AS吗?
我读到一些 DBA 的脚本完成了完整数据库的行,然后使用新的排序规则将插入脚本运行到数据库中 - 我对此非常害怕和警惕 - 你会建议这样做吗?
sql-server-2008 ×10
sql-server ×8
c# ×1
collation ×1
deadlock ×1
memory ×1
null ×1
pivot ×1
sql-clr ×1
ssas ×1