标签: sql-server-2008

NHibernate 参数嗅探,SQL Server 2005 与 SQL Server 2008

NHibernate 自动使用带有不同参数的 sp_executesql 来执行它的数据。现在我们在生产中注意到的是,我们有时会受到参数嗅探的影响。通过这种方式,查询性能不仅会受到影响,而且实际上会导致超时。

我不是 DBA,所以我有点犹豫,但对我来说,查询似乎正在针对少量数据(10 行)进行优化,然后必须查询大量数据(150000 行),这些数据正在打磨它停止。

现在我发现了 4136 Trace,它完全禁用了 SQL Server 实例的参数嗅探。

现在,由于我们也在升级我们的一些服务器,我想知道 NHibernate 在 SQL Server 2008 上的行为是否与 2005 年有所不同。例如,它是否添加了 OPTIMIZE FOR UNKOWN 点点滴滴。

据我所知,SQL 2008 中添加了一些“工具”,以便更好地处理这些参数嗅探问题。我很好奇 NHibernate 是否采用了这些工具并使用它们,或者如果我们更改为 SQL Server 2008,我们仍然必须使用此跟踪或类似的东西来处理这些问题。

sql-server-2005 sql-server-2008

6
推荐指数
1
解决办法
1372
查看次数

SQL Server 2008 表维护 - 重建、重组、更新统计信息、检查完整性等

我正在将一个约 15GB 的数据库从 SQL Server 2005 迁移到运行 SQL Server 2008 的新服务器,同时我需要创建所有新的维护计划。我可以处理所有备份的东西,但表维护让我有些困惑。有没有人对我应该多久(或者你多久做一次就足够了)以下任务有任何意见?

  • 检查数据库完整性
  • 重建索引
  • 重组索引
  • 更新统计
  • 收缩数据库?

我错过了什么吗?再说一次,如果您能分享您执行这些任务的频率,那就太好了……和/或分享有关您的表格维护方法的任何一般信息,这将很有帮助。最后,我以什么顺序运行这些任务(在设置作业时)是否重要?

哦,我愿意接受任何可能有帮助的链接!

sql-server-2005 sql-server-2008 maintenance

6
推荐指数
1
解决办法
9656
查看次数

在 SQL Server 2008 R2 中为实体设计批准队列和审计跟踪的最佳方法是什么?

简化说明:我有三个主要表:customer、phone 和customer_phone 来解决多对多问题。我需要确保只有管理员才能在未经批准的情况下插入/更新这些表。其他所有人都需要将他们的东西放入批准队列,以便管理员批准。管理员需要在批准/拒绝之前查看当前值和提议的更改。系统应该在审计跟踪中记录谁提交了信息,谁批准了它(如果适用),以及任何修改它的人。当前采用的方法为每个实体提供三个表:

  1. 主实体表
  2. 未批准记录的保存表
  3. 每个实体的审计日志表

我认为应该有一些更简单的解决方案。当前系统在以下情况下存在问题:

  • 管理员在主实体被批准之前尝试批准一个实体,它链接到
  • 该记录已存在于数据库中,但需要批准将其链接到另一条记录

这对我来说似乎不是最佳解决方案。有没有更好的办法?

更长的解释:这是场景的简化视图:我有一个主要实体和次要实体通过链接表链接到它。管理员可以随意添加/编辑任何实体,但标准用户必须在更改生效之前获得管理员的批准。问题是,有时当标准用户输入主实体和链接实体时,管理员必须先批准主实体,链接才能生效。我希望管理员能够在批准之前查看旧值和提议的新值,并且我希望确保他们首先批准主要实体。例如,假设我们有下表,客户是主要实体,电话是次要实体,然后有一个链接表来解决多对多关系:

CREATE TABLE [dbo].[customer](
  [Customer_ID] [int] NOT NULL,
  [Customer_Name] [varchar](255) NOT NULL,
PRIMARY KEY CLUSTERED ([Customer_ID] ASC)

CREATE TABLE [dbo].[phone](
  [Phone_ID] [int] NOT NULL,
  [Phone_Number] [int] NOT NULL,
PRIMARY KEY CLUSTERED ([Phone_ID] ASC)

CREATE TABLE [dbo].[customer_phone](
  [Customer_Phone_ID] [int] NOT NULL,
  [Customer_ID] [int] NOT NULL,
  [Phone_ID] [int] NOT NULL,
  [Approved] [char](1) NOT NULL, --Y/N
PRIMARY KEY CLUSTERED ([Phone_ID] ASC)
Run Code Online (Sandbox Code Playgroud)

现在,只有管理员才能在未经批准的情况下添加客户或电话号码。如果标准用户想要添加某人,它会进入一个保留表。这就是目前在我的系统中的样子。除了以上表格:

CREATE TABLE [dbo].[customer_holding](
  [Customer_ID] [int] NOT NULL,
  [Customer_Name] [varchar](255) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 best-practices

6
推荐指数
1
解决办法
2953
查看次数

varchar 性能影响

之前已经问过这个问题(在 SQL Server 2008 中使用 varchar 的速度影响),但答案不够详细,令我满意。诚然,这不是当前的问题,主要是针对我的教育。

但是,我将尝试将其作为我正在做的一些当前数据库模式工作的具体示例;

选项 A

CREATE TABLE [VMware].[TblHostSystem](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    <snip/>
    [PowerStateID] [int] NOT NULL
)

ALTER TABLE [VMware].[TblHostSystem]  WITH
CHECK ADD  CONSTRAINT [FK_TblHostSystem_TblPowerState]
FOREIGN KEY([PowerStateID])
REFERENCES [VMware].[TblPowerState] ([ID])
GO

CREATE TABLE [VMware].[TblPowerState](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

选项 B

CREATE TABLE [VMware].[TblHostSystem](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    <snip/>
    [PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

如果我选择了选项 B(正如模式的前任作者所做的那样),由于主机的功能会经常变化,这会产生什么样的流失?

一些我认为是真实的陈述,

  1. Varchar 存储在 MSSQL 2008 上的同一行/页中。
  2. Varchars 没有填充?

所以我的问题是,当将第二个示例中的 …

performance sql-server-2008 varchar

6
推荐指数
1
解决办法
1508
查看次数

如何找出谁是 SQL Server 2008 中的资源猪?

我们在具有 24+GB RAM 和 16 个内核的机器上安装了 SQL Server 2008。加上快速驱动器等。按照我们的标准,这是一台大型机器。

无论如何,那台机器 100% 专用于 SQL Server,并且上面有两个生产数据库。每个数据库来自两个不同的供应商。

这已经运行了2年。

现在,在过去 2 周内,供应商 B 表示 SQL Server 无法处理其 8 GB 数据库的性能。几个月来,我们的结局没有任何变化。我们的数据库服务器没有被触及。

供应商 A 工作得很好。

所以听起来供应商 A 正在占用更多资源并减慢供应商 B 的速度。但我不怀疑供应商 A 是罪魁祸首,因为我熟悉他们的数据库及其用户。

如何找出每个数据库使用了多少资源?我怎么能说供应商 A 获得 50% 和供应商 B 获得服务器的 50%?

performance sql-server-2008

6
推荐指数
1
解决办法
319
查看次数

无法在 Server 2008/x86/SQL Server 2008 机器上运行 SQL Server 2012 RTM LocalDB

我已经在我的开发机器上安装了 SQL Server 2012 和 LocalDB,并且能够使用 SQL Server 管理工具 2012 和使用新修改的连接字符串从我的 winform 应用程序中连接到 LocalDB,如下所示:

Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated Security=True;Connect Timeout=60
Run Code Online (Sandbox Code Playgroud)

当我尝试将我的应用程序移植到运行 SQL Server 2008 的 Windows 2008 Server 时出现问题(我知道我可以跳过 LocalDB 安装而只使用 SQL Server 2008,但我只是在测试我的应用程序的安装在这台机器上..)

我已经安装了 SQL Server 2012 LocalDB 并使用位于http://support.microsoft.com/kb/2544514 的知识库文章将 .net 4.01 更新为 .net 4.02

我不断收到收到一个错误,当我尝试连接到(LocalDB)\v11.0来自我的应用程序,并从SQL Server管理工具2008,我也手动启动(LocalDB)\v11.0cmd->SQLLocalDB -s "v11.0",然后尝试再次连接使用NP

IE np:\\.\pipe\LOCALDB#8B2C7490\tsql\query

当我使用命名管道时,一切都连接正常,所以我假设这样有效,那么 LocalDB 的安装也是正确的。

你建议我怎么做来解决这种情况?

我还担心随着我的应用程序部署的正确实施,我现在是否应该将 .Net 4.03 作为先决条件?如果是这样,是否已经有一个 clickonce bootstrap 清单可用于此,或者我是否需要创建一个..以便我的应用程序正常工作,我真的很担心 LocalDB 可能会破坏它..到目前为止我还没有多幸运..

我想如果所有其他方法都失败了,我可以重新使用 SQL Server Express 2008,因为此实现之前可以正常工作..

谢谢,

sql-server-2008 sql-server-2012

6
推荐指数
1
解决办法
1634
查看次数

使用动态 SQL 在不同的数据库中创建视图

作为一个更大项目的一部分,我试图在 SQL Server 实例中的每个数据库上创建一个新视图。

我创建了一个存储过程,其中包括通过游标循环遍历实例中的数据库,然后尝试使用sp_executesql. 不幸的是,我试图在其上创建视图的数据库中不存在存储过程。所以我试图让 sql server 使用该数据库,然后运行创建视图脚本。当我运行它时,我收到错误

'CREATE VIEW' 必须是查询批处理中的第一个语句。

关于我如何做到这一点的任何想法?这是sp_executesql程序的一部分。

declare @DB VARCHAR(50)
declare @SQL NVARCHAR(max)
set @DB = '[dbname]'

SET @SQL =  N'USE ' + @DB + N' CREATE VIEW vNonhiddenCategories 
AS
SELECT categories.categoryid
FROM categories
--WHERE ... irrelevant remainder of view code ...
'
execute sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server dynamic-sql t-sql

6
推荐指数
1
解决办法
9934
查看次数

将表传入存储过程

是否可以将表名传入存储过程?

例如,假设您有同一个表的多个视图。它们都具有完全相同的结构。

您需要一个可以为任何视图运行的存储过程。

就像是:

create procedure myprocedure
@tableName varchar(50) = ''
select blah from @tableName where blah = blah2 
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我得到

Must declare the table variable @tablename
Run Code Online (Sandbox Code Playgroud)

任何想法我怎么能做到这一点?

sql-server-2008 sql-server stored-procedures

6
推荐指数
3
解决办法
1万
查看次数

NESTING_TRANSACTION_FULL 锁存器

SQL Server 2008 生产性能远低于预期。与下班后的 250 毫秒相比,简单的单表查询有时在中午工作 5 秒。当负载增加时,我们无法找到哪个资源是瓶颈。

通常关于性能调优的建议无济于事。CPU未过载(约30%),页面寿命约1.5小时;IO 队列几乎总是空的。sys.dm_os_wait_statswait_time_ms:有一个可疑的记录引导视图LATCH_EX。最大的锁存器(比第二大锁存器大 4 倍)是NESTING_TRANSACTION_FULL. 这被描述为“仅供内部使用”

请问NESTING_TRANSACTION_FULL统计意味着什么?它能否为我们提供诊断其配置、硬件、应用程序等问题的线索?

performance sql-server-2008 sql-server

6
推荐指数
1
解决办法
3954
查看次数

DML 操作的 SQL Server 并行性

我知道 SQL Server 可以将并行性用于某些 DDL 操作,例如索引重建或某些 SELECT 语句,当查询成本超过并行性成本阈值时,很可能在数据仓库环境中。

从版本 8i 开始,ORACLE 提供并行 DML操作,如 INSERT、UPDATE 或 DELETE。

SQL Server 是否对 DML 操作使用并行性?

sql-server-2005 sql-server-2008 sql-server

6
推荐指数
1
解决办法
2433
查看次数