在 Microsoft SQL Server 2012 上激活 FILESTREAM 功能后,SQL Server 将在系统上创建“隐藏”共享。份额定义如下:
Sharename FILESTREAM_SHARE
Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark SQL Server FILESTREAM share
Maximum users unlimited
Users Caching Manual caching of documents
Permissions NT-AUTHORITY\Authenticated Users, FULL
Run Code Online (Sandbox Code Playgroud)
该名称是您在SQL Server 配置管理器中最初配置 FILESTREAM 时提供的共享名称。但它是为了什么?
我通读了所有可用的 FILESTREAM 文档,从以下位置开始:
sql-server-2008 sql-server database-internals sql-server-2012 filestream
我在同一台服务器上有两个 SQL Server 实例:
sp_configure 结果在两个实例上相同(新的 2016 选项除外)。
我在同一个磁盘文件夹上的两个实例上创建了新数据库。自动生长参数相同。
自动创建和自动更新统计选项被关闭。
然后我做了一个测试,将 10000 次插入到一个堆中:
set nocount on
go
create table dbo.TestInsert ( i int not null, s varchar(50) not null )
declare @d1 datetime, @d2 datetime, @i int
set @d1 = getdate()
set @i = 1
while @i <= 10000
begin
insert into dbo.TestInsert ( i, s ) select @i, …Run Code Online (Sandbox Code Playgroud) 假设我正在运行日志备份,并且该日志备份需要 10 分钟才能完成。在这 10 分钟的窗口中,将运行进一步的事务。鉴于以下示例,日志备份实际上包含哪些事务?
- 事务 A 提交
- 事务 B 打开
- 日志备份开始
- 交易 C 开启
- 事务 B 提交
- 日志备份完成
- 事务 C 提交
根据我阅读的关于 SQL Server 2008 Internals and Troubleshooting(从伊利诺伊州的当地图书馆借来)的书籍,Christian Bolton、Brent Ozar 等。我试图在 SQL Server 上寻求理解和确认,并在网上进行大量搜索,如果有人,我将不胜感激可以确认或更正我的理解。
每个需要查询内存授予的查询或操作都需要工作空间内存。在使用排序、哈希匹配连接、并行(不确定)、批量插入(不确定)、索引重建等的一般查询中,将需要查询工作区内存..
工作区内存是 SQL Server 缓冲池的一部分(它作为缓冲池的一部分分配),最大工作区内存是分配给缓冲池的内存的 75%。默认情况下,单个查询无法获得超过 25% 的工作区内存(在 SQL 2008/SQL 2012 中——由开箱即用的资源调控器默认工作负载组控制)。
寻求确认我的理解
1) 考虑到具有 48 GB RAM 和最大服务器内存配置为 40 GB 的系统,这是否意味着最大工作区内存限制为 30 GB,并且单个查询不能获得超过 10 GB 的工作区内存(查询内存)。因此,如果您有一个处理 10 亿行进行大规模散列连接的错误查询,并且需要超过 10 GB 的内存(工作区内存),它甚至会关心通过此内存授予队列或立即溢出到磁盘吗?
2) 如果执行大规模排序操作的查询已分配 5 MB 的工作空间内存,并且在查询的查询执行期间,如果查询优化器意识到由于错误的统计信息或缺少索引,该查询实际上需要30 MB的工作空间内存将立即溢出到 tempdb。即使系统在执行期间有足够的工作空间内存可用,一旦查询在执行期间超过授予的工作空间内存,它也必须溢出到磁盘。我的理解是否正确?
使用 SQL Server Profiler(我使用的是 SQL Server 2012),我试图生成一个有用的跟踪来显示参数值,而不仅仅是带有变量名的 SQL。存储过程遍历大量库存数据以生成一些非常有价值的结果,我正在尝试记录现有行为,以便我可以对其进行单元测试,准确定义它,然后将其重构为合理的东西。
我有一个存储过程,它在一个循环中执行一个 54 个参数的子过程,其中存储过程创建一个游标然后执行一个 while 循环。这是一个简化的视图:
CREATE PROCEDURE
[dbo].[OuterProcedure]
( @ProductCode varchar(8),
-- 41 more parameters omitted
)
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON
DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations.
-- OMIT ABOUT 10 temporary table declarations.
DECLARE aCursor CURSOR FAST_FORWARD FOR
SELECT [ID],bkno, -- about 40 fields omitted.
FROM vwVeryComplexViewThatDoesALotOfVeryBrutalJoins
WHERE (about_80_boolean_expressions AND omitted_here)
ORDER BY some,keys,like,this
OPEN aCursor
FETCH NEXT FROM aCursor /* Get …Run Code Online (Sandbox Code Playgroud) 我们在 AlwaysOn 组中有 2 台服务器。
虽然每个同步数据库中的用户帐户都存在于两台服务器上,但数据库实例级登录仅存在于其中一台服务器上。即 DBINSTANCE->Security->Logins 在一台服务器上丢失。
因此,当发生故障转移时,我会在第二台服务器(没有相应的实例级别登录)上登录失败。
我如何克服这个问题?我应该以特殊方式设置用户帐户吗?
2012 年发布的 SQL Server 集成服务 SSIS 提供了一个 SSISDB 目录,用于跟踪包的操作(除其他外)。使用项目部署模型的解决方案的默认包执行将打开 SSISDB 的日志记录。
当一个包执行时,System::ExecutionInstanceGUID填充有一个值,如果使用显式日志记录(到sys.sysdtslog90/ sys.sysssislog)将记录特定包执行的所有事件。
我想知道的是,如何将 ExecutionInstanceGUID 绑定到SSISDB 目录中的任何内容。或者,在 SSISDB 中执行的 SSIS 包是否知道其值catalog.executions.execution_id
最终,我尝试使用现有的自定义审计表并将其链接回 SSISDB 目录中的详细历史记录,但似乎找不到链接。
我有点像一个新的 DBA,我正在管理一个具有大量活动的 SQL Server 2012 实例。我在完全恢复模式下运行,因为我们需要时间点恢复。
现在,我每天凌晨 5 点对数据库和日志进行完整备份。一些日志文件已经膨胀到 300gb,即使在进行备份后,它们的大小也不会减小。我可以通过运行类似于以下内容的内容来减小它们的大小:
BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);
Run Code Online (Sandbox Code Playgroud)
当我检查备份文件的 LSN 时,我看到如下内容:
RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN: 15781000014686200001
SecondLSN: 15802000000665000001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN: 15802000000665000001
SecondLSN: 15805000000004100001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN: 15805000000004100001
SecondLSN: 15808000000004200001
Run Code Online (Sandbox Code Playgroud)
我不相信我通过缩小日志文件来破坏我的日志链。读到这里,我确实相信我正在损害我的性能,因为那些缩小的日志文件必须重新增长自己。
问题:
我正在尝试在 Windows 7 SP1 x64 上安装带有 SP1 x64 的 SQL Server Express 2012。这台机器以前安装了 SQL Server Express 2012。此实例已升级到 SQL Server 2012 Standard,此后已被卸载。
以下是安装过程中选择的选项:
在安装中包含 SQL Server 产品更新 -- 2 个与 KB 2793634 相关
将所有功能安装到默认目录
默认实例根目录中的命名实例 SQLEXPRESS
默认服务帐户:SQL Server 数据库引擎 -> NT Service\MSSQL$SQLEXPRESS
默认数据库引擎配置
安装失败并出现以下错误:
标题:Microsoft SQL Server 2012 Service Pack 1 安装程序
发生了以下错误:
找不到数据库引擎启动句柄。
如需帮助,请单击:http : //go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft%20SQL%20Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.3128.0&EvtType=0xD15B4EB2%2525405B4EB2%2525405BA1BA1
- - - - - - - - - - - - - - - 纽扣:
好的
我读到这可能与损坏的 MSSQL$SQLEXPRESS 虚拟帐户有关。
有想法该怎么解决这个吗?
谢谢,
乔恩。 …
可以将“Lock Pages in Memory”权限授予 SQL Server 使用的服务帐户。这允许 SQL Server 防止内存被分页到磁盘。
我注意到我们的一些 SQL Server 机器没有配置本地策略来为 SQL Server 使用的服务帐户允许此权限。由于我们拥有大量服务器,因此使用“本地系统策略”管理控制台手动检查每台服务器至多是乏味的。
是否有 T-SQL 查询、扩展存储过程或其他一些我可以用来确定有问题的服务器是否正确的方法?
我不想使用,EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';因为它依赖于检查当前的 SQL Server 错误日志;并且该错误日志可能不包含相关条目,假设自服务器上次重新启动以来日志已被翻转。我意识到我可以通过修改第一个参数0to1等来检查旧日志,但是我们只保留 10 个错误日志,这可能还不够。我想要一种确认设置的故障安全方式。
sql-server-2012 ×10
sql-server ×7
backup ×2
filestream ×1
installation ×1
logins ×1
logs ×1
performance ×1
profiler ×1
ssis ×1