我正在构建一个应用程序,我计划在其中嵌入 SQL Server 2012 Express 作为主数据存储。在我的开发机器(具有 3GB RAM 的 Win7-32)上进行测试时,我从未观察sqlservr.exe到使用超过 1GB RAM的过程,正如我对已发布的 SQL Server Express 版硬件扩展限制所期望的那样。
然后我将我的应用程序移到一台服务器级机器(Win Server 2008R2 64 位,16GB RAM)来评估它的性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约 9.5GB 的 RAM 并停留在那里。
我重新启动了几次,看看是否会有任何影响,但每次,该过程都迅速恢复到 ~9.5GB。现在我当然很高兴让 SQL Server Express 使用我的 RAM,但我想知道这是否是预期的行为,以便我不会依赖基于不正确的 RAM 使用的性能级别。
仅供参考,根据SELECT @@VERSION,我的服务器机器上的 SQL Server 版本是:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)
我的 9.5GB 号码来自任务管理器中的“私人工作集”号码。来自 …
有没有办法纯粹在 T-SQL 中从现有表生成创建脚本(即不使用 SMO,因为 T-SQL 无法访问 SMO)。假设一个存储过程接收一个表名并返回一个包含给定表的创建脚本的字符串?
现在让我描述一下我面临的情况,因为可能有不同的方法来解决这个问题。我有一个包含几十个数据库的实例。这些数据库都具有相同的架构、相同的表、索引等。它们是作为第三方软件安装的一部分创建的。我需要有一种与他们合作的方法,以便我可以以特别的方式从他们那里收集数据。dba.se 的好人已经在这里帮助了我如何在不同的数据库中创建触发器?
目前我需要找到一种方法来从所有数据库的表中进行选择。我已将所有数据库名称记录到一个名为的表中,Databasees并编写了以下脚本来对所有数据库执行 select 语句:
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
select * into #tmp from Database1.dbo.Table1 where 1=0
DECLARE @statement nvarchar(max) =
N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1'
DECLARE @LastDatabaseID INT
SET @LastDatabaseID = 0
DECLARE @DatabaseNameToHandle varchar(60)
DECLARE @DatabaseIDToHandle int
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
WHILE @DatabaseIDToHandle …Run Code Online (Sandbox Code Playgroud) SQL Server 2012 中代号Denali为Columnstore 索引的新功能之一。
我对常规的旧行存储索引非常了解,例如 b 树结构、叶级和 b 树页面之间的存储差异、包含字段的影响、优化使用它们、键的顺序等。
我很难获得有关列存储索引内部结构的任何好的信息。
我能找到的很多关于它们的信息基本上与“正常”索引完全相反,即没有键的排序,没有包含的字段,只有非聚集。
任何见解表示赞赏。
我正在尝试运行sqlcmd.exe以便从命令行设置新数据库。我在 Windows 7 64 位上使用 SQL SERVER Express 2012。
这是我使用的命令:
SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log
Run Code Online (Sandbox Code Playgroud)
这是一段 sql 文件创建脚本:
CREATE DATABASE aqualogy
COLLATE Modern_Spanish_CI_AS
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
use aqualogy
GO
CREATE TABLE [dbo].[BaseLayers] (
[Code] nchar(100) NOT NULL ,
[Geometry] nvarchar(MAX) NOT NULL ,
[IsActive] bit NOT NULL DEFAULT ((1))
)
EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'Capas de cartografía base de la aplicaicón. Consideramos en Galia Móvil la cartografía(...)' …Run Code Online (Sandbox Code Playgroud) 我们使用 SQL 身份验证(以减少连接池的数量)和 .NET 4.0 连接字符串连接到 Windows 2008 R2 Enterprise Server 上的 SQL Server Enterprise Edition 2012 SP1:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
2012 年 10 月 19 日 13:38:57
版权所有 (c) Microsoft Corporation
Enterprise Edition(64 位)在 Windows NT 6.1(Build 7601:Service Pack 1)上
我们使用大约 50 个服务器分成 8 个不同的组,网站的不同部分。
我们的网站正在使用此 SQL Server 来记录访问跟踪数据。在过去的几天里,它发出了有关重置连接池的以下消息:
客户端无法重用 SPID 1327 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
错误日志如下:
错误:18056,严重性:20,状态:46
。客户端无法重用 SPID 959 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
用户“xxxx”登录失败。原因:重新验证连接上的登录时,无法打开登录对象中配置的数据库“xxxxxxxx”。[客户:10.xx.xx.xxx]
经过一番挖掘,我在 CSS 博客上找到了这篇文档:它是如何工作的:错误 18056 – 客户端无法重用带有 SPID …
有没有办法将维护计划从一个 SQL Server 2012 复制到另一个?无法同时(在不同网络上)通过相同的 Management Studio 副本访问两台服务器。
我有两台运行 SQL Server 的服务器。
据我所知,SQL Server 2008 R2 Express 应该只使用一个核心。
SQL Server 2012 Developer 版本应使用所有 8 个内核。
但是,如果我在 SQL Server 2008 R2 Express 上的 SQL 查询中运行以下命令,它会显示 4 个内核。
select scheduler_id, cpu_id, status, is_online
from sys.dm_os_schedulers
where status = 'VISIBLE ONLINE'
Run Code Online (Sandbox Code Playgroud)
我是否使用正确的命令来衡量使用情况?
最近在遇到恢复数据库的脚本时,我对为什么必须使用“ FILE = 1 ”产生疑问?没有那个语句我们就不能恢复数据库吗!?基本上,它是用来做什么的?
为了让这个问题对未来的读者有用,我将使用通用数据模型来说明我面临的问题。
我们的数据模型由 3 个实体组成,它们应标记为A、B和C。为了简单起见,它们的所有属性都将是int类型。
实体A具有以下属性:D,E和X;
实体B具有以下属性:D,E和Y;
实体C具有以下属性:D和Z;
由于所有实体共享公共属性D,我决定应用类型/子类型设计。
重要提示:实体是互斥的!这意味着实体是 A 或 B 或 C。
实体A和B还有另一个共同的属性E,但是这个属性并不存在于实体中C。
如果可能的话,我想使用上述特性来进一步优化我的设计。
老实说,我不知道如何做到这一点,也不知道从哪里开始尝试,因此这篇文章。
我正在通过源服务器上的视图从链接服务器查询数据。该视图必须包含几个标准化列,例如Created,Modified和Deleted,但在这种情况下,源服务器上的表没有任何合适的信息。因此,列被显式转换为它们各自的类型。我更新了视图,从
NULL AS Modified
Run Code Online (Sandbox Code Playgroud)
到
CAST(NULL as DateTime) as Modified
Run Code Online (Sandbox Code Playgroud)
但是,执行此更新后,视图会触发以下错误消息:
消息 7341,级别 16,状态 2,第 3 行无法从链接服务器“”的 OLE DB 提供程序“SQLNCLI11”获取列“(用户生成的表达式)。Expr1002”的当前行值。
我们已经在源服务器上完成了这种“显式转换” - 无需担心,我怀疑这个问题可能与所涉及的服务器版本有关。我们真的不需要应用这个演员表,但感觉更干净。现在我只是好奇为什么会发生这种情况。
服务器版本(来源):
Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 2014 年 5 月 14 日 18:34:29 版权所有 (c) Microsoft Corporation Enterprise Edition(64 位),Windows NT 6.1(内部版本 7601:Service Pack 1)(管理程序)
服务器版本(链接):
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Microsoft Corporation Enterprise …
sql-server-2012 ×10
sql-server ×9
backup ×1
columnstore ×1
dynamic-sql ×1
encoding ×1
index ×1
memory ×1
restore ×1
sqlcmd ×1
subtypes ×1
t-sql ×1