小编Sha*_*nky的帖子

替换 Postgres 中的物化视图

我有一个物化视图Postgres 9.3,我想用新列进行更新。但是,其他物化视图也依赖于该视图,并且错误消息表明当其他对象依赖于该视图时,无法删除该视图。

错误:无法删除物化视图 latest_charges 因为其他对象依赖它

从文档中还可以看出 REPLACE 关键字对物化视图无效。除了删除所有依赖对象并重建每个对象之外,还有其他捷径吗?

postgresql view materialized-view

29
推荐指数
2
解决办法
3万
查看次数

从一个存储过程启动3个存储过程时如何回滚

我有一个存储过程,它只在其中执行 3 个存储过程。如果主 SP 成功,我只使用 1 个参数来存储。

如果第一个存储过程在主存储过程中工作正常,但第二个存储过程失败,那么它会自动回滚主 SP 中的所有 SP 还是我必须发出一些命令?

这是我的程序:

CREATE PROCEDURE [dbo].[spSavesomename] 
    -- Add the parameters for the stored procedure here

    @successful bit = null output
AS
BEGIN
begin transaction createSavebillinginvoice
    begin Try
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

   BEGIN 

   EXEC [dbo].[spNewBilling1]

   END

   BEGIN 

   EXEC [dbo].[spNewBilling2]

   END

   BEGIN 

   EXEC [dbo].[spNewBilling3]

   END 

   set @successful  = 1

   end Try

    begin Catch
        rollback transaction createSavesomename
        insert …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures transaction

27
推荐指数
2
解决办法
5万
查看次数

规划缓存大小和保留内存

运行包含实际执行计划的查询时,根运算符 ( SELECT) 告诉我缓存计划大小为 32KB。

该连接的查询sys.dm_exec_cached_planssys.dm_os_memory_objects,看问题的计划,称该值pages_in_bytesmax_pages_in_bytes为32768(32KB),它匹配缓存计划的大小。

我不明白的是 中的值sys.dm_exec_cached_plans.size_in_bytes,即 49152 (48KB) 代表什么。我已经阅读了所有这些专栏的 BOL,特别是size_in_bytes其中说:

"缓存对象消耗的字节数。 "

我无法解决最后一点难题,无法理解它的真正含义。

我知道所有操作符(不是谈论用于排序和散列的额外内存授予)都需要一定数量的固定内存,以存储状态、进行计算等,这些内存与缓存中的优化计划一起存储,但在哪里?

所以,我的问题是:

  • 什么size_in_bytes意思
  • 为什么它的值高于“缓存计划大小”?
  • 所有运算符/迭代器的固定内存量在哪里保留,是“缓存计划大小”(在我的示例中为 32Kb),还是其他任何地方?

我知道它们是具有不同功能的不同 DMV,但它们是相关的。在编译(缓存)计划sys.dm_exec_cached_plans加入sys.dm_os_memory_objectsmemory_object_address列。我在这里发布问题的原因是我在寻求帮助,了解如何解释 DMV 及其专栏。

如果size_in_bytes是缓存计划大小,为什么SQL Server在实际执行计划中说另一个值?

新查询,新号码:

  • 实际计划
    • 缓存计划大小 16KB
    • 编译内存 96KB
  • DMV:
    • sys.dm_exec_cached_plans.size_in_bytes 24KB
    • sys.dm_os_memory_objects.pages_in_bytes, .max_pages_in_bytes 16KB。

另请注意,此查询不需要为排序和散列操作分配任何额外的内存。

Microsoft SQL Server 2012 - 11.0.5343.0 (X64)

sql-server memory dmv sql-server-2012 plan-cache

19
推荐指数
1
解决办法
5139
查看次数

备份内部结构 - 当备份作业运行时会发生什么 - 在 SQL Server 中的锁定和性能开销方面?

对于 MySQL,我知道数据库是在 SQL 语句中逐表备份的,这会导致锁定,如果在备份时更新列,则最终可能会出现完整性问题。

据我了解,这不适用于 Microsoft SQL Server,但 SQL Server 是如何处理的?是否有一些内部冻结来保持数据库一致?

我还听说备份是单线程的,这意味着它只使用一个核心,假设您备份到单个文件。还假设您有一台多核机器,例如 16 核,或者至少比 1 多得多。

根据我的个人经验,我在备份时从未遇到过问题,既没有锁定也没有开销问题,但我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩。

那么当备份作业正在运行时会发生什么?不同版本是否也有显着差异?例如 2008、2012 和 2014(不是许可证)。

sql-server backup sql-server-2012 sql-server-2014

14
推荐指数
3
解决办法
4717
查看次数

安装 SQL Server 2012 Express 失败并显示错误“找不到数据库引擎启动句柄”。

我正在尝试在 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 虚拟帐户有关。

有想法该怎么解决这个吗?

谢谢,

乔恩。 …

installation sql-server-2012

13
推荐指数
2
解决办法
12万
查看次数

为什么 SQL Server Express 的实例名称会发生​​变化?

我正在使用一个网络应用程序

SQL Server Express(Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 2016 年 10 月 28 日 18:17:30 版权所有 (c) Microsoft Corporation Express Edition(64 位),Windows 10 Pro 6.3(内部版本 18362) :))。

Web 应用程序正在使用连接字符串连接到数据库。在搜索了几天的正确连接字符串格式后,我设法找到了格式,使用 Nik 在这篇博客文章中描述的方法,它是:

Data Source = np:\\.\pipe\LOCALDB#A9DE3E14\tsql\query; Initial Catalog = MyDataBaseCatalog; User ID = myuser; Password=mypassword;
Run Code Online (Sandbox Code Playgroud)

昨天一切正常,但今天它停止了。我发现服务名称已更改为:

LOCALDB#B87CB983
Run Code Online (Sandbox Code Playgroud)

用连接字符串中的新服务名称替换实例名称后,Web 应用程序运行良好,但这不是可接受的解决方案。

你能告诉我为什么实例名称会改变吗,是否有任何 Express 版本限制?如何将名称配置为永久?

sql-server sql-server-express

9
推荐指数
1
解决办法
651
查看次数

该相信哪个?

我们正在与供应商解决一个长期存在的问题。他们的软件有一种倾向,每周一到两次停止工作并停止工作,从而对我们的运营造成重大干扰。尽管我们向他们发送了许多 GB 的日志和数据库备份,但他们仍无法确定原因。最近,他们开始暗示问题出在我们的维护上,而不是出在他们的软件上(尽管没有长时间运行的查询、CPU/RAM/IO 压力,甚至在问题发生时出现死锁)。特别是他们说我们的索引是一个问题。

他们最喜欢使用的工具是 DBCC showcontig,尽管我认为 MS 不赞成使用该工具。他们尤其关注扫描密度和范围碎片。为了消除这个借口,我制定了一些积极的夜间维护,以<90% 的扫描密度或> 10% 的碎片重建索引。这在某种程度上使他们脱离了扫描密度序列,但他们仍然专注于范围碎片。即使在数小时前重建的索引上,DBCC showcontig 也会显示高度碎片化。下面是 dbcc_showcontig 和 sys.dm_db_index_physical_stats 的结果,他们指出一个表是“可能的问题”。

DBCC SHOWCONTIG
Run Code Online (Sandbox Code Playgroud)
  • 扫描的页面......................................: 1222108
  • 扫描的范围............................................:152964
  • 范围开关………………………………………………………………………………………………………………
  • 平均 每个范围的页数………………………………………………………………………………………………………………………………………………
  • 扫描密度 [最佳计数:实际计数]......:84.44% [152764:180905]
  • 逻辑扫描分片 ..................... 3.24%
  • 范围扫描碎片 ..................... 35.97%
  • 平均 每页可用字节数........................: 692.5
  • 平均 页面密度(完整)......................:91.44%

sys.dm_db_index_physical_stats

index_type_desc      alloc_unit_type_desc     Avg_fragmentation_in_percent  page_count

CLUSTERED INDEX       IN_ROW_DATA          3.236803129  1222070

NONCLUSTERED INDEX    IN_ROW_DATA          0.680074642  48230

NONCLUSTERED INDEX    IN_ROW_DATA          0.093237195  48264

NONCLUSTERED INDEX    IN_ROW_DATA          0.03315856   48253

NONCLUSTERED INDEX    IN_ROW_DATA          0.194653248  48291

NONCLUSTERED INDEX    IN_ROW_DATA          0.393480436  58961

NONCLUSTERED INDEX    IN_ROW_DATA          0.23622292   64346 …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server

8
推荐指数
1
解决办法
185
查看次数

当主服务器不再可用时,删除辅助服务器上的日志传送配置

我的 SQL Server 2005 主服务器出现故障,所以我在辅助服务器上启动了日志传送数据库。数据库在辅助服务器上,我只需要删除它的日志传送设置,而主服务器不再可访问。

似乎sp_delete_log_shipping_secondary_database应该在辅助服务器上执行存储过程来执行此操作,它“删除辅助数据库并删除本地历史记录和远程历史记录”,正如msdn 上所述

这也会删除数据库本身吗?还是只有它的日志传送设置?当主服务器不可访问时它会做什么?

我不能丢失辅助服务器上的数据库,因为它已经在使用中。

sql-server-2005 sql-server log-shipping

8
推荐指数
1
解决办法
6773
查看次数

使用 TDE (SQL Server) 进行备份压缩的内部结构

有没有人(内部?)了解备份压缩如何与 SQL Server(2016+ 版)上的 TDE 配合使用。

一般来说,我认为压缩加密数据的好处很小,但是我们注意到,使用 TDE,当我们使用压缩进行完整备份时,我们仍然看到备份文件大小显着减少。这让我们怀疑备份过程是否会解密数据、压缩数据、加密结果,然后将其备份到磁盘。显然,由于需要解密和重新加密数据,这将增加备份过程的 CPU 消耗。

细节

select @@version

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 2017 年 8 月 22 日 17:04:49 版权所有 (C) 2017 Microsoft Corporation Developer Edition(64 位),Windows 10 Enterprise 10.0(内部版本 17763:)(Hypervisor)

TSQL脚本

备份数据库 TestTDE 到磁盘 = 'c:\Test\TestTDE_Compressed.bak' WITH COMPRESSION, MAXTRANSFERSIZE = 65537

还是以不同的方式实现了空间节省?

sql-server backup transparent-data-encryption sql-server-2017

8
推荐指数
1
解决办法
381
查看次数

数据库碎片整理和自动增长设置

我们确实为 SQL Server 2008 r2 express 制定了一些维护计划。如果任何表的页数超过 50 并且平均碎片超过 20,我们每个月都会对数据库进行碎片整理。

如果数据库日志大小>2MB,则恢复模式为简单,收缩,恢复模式重新设置为FULL。如果 Page_count>50 且 avg_fragmentation_in_percent > 30,则索引为 REBUILD。

如果 Page_count>50 且 avg_fragmentation_in_percent > 5 且 <30,则索引为 REORGANIZE。

这就是我们目前正在做的事情。但是我们发现自增长事件是资源密集型的,不应重复发生。现在,对于所有数据库,mdf 文件的自动增长设置为 MB,ldf 文件设置为 10%,这是创建新数据库时的默认值。我们计划根据每天变大的数据库数量来增加数据库的自动增长值。但是我想知道有多少自动增长事件对数据库来说是理想的。我应该设置自动增长以便它每天、每周或每月等只发生一次吗?所以请帮助我为我的数据库设置自动增长值。还有另一个问题,如果我每月对数据库进行碎片整理,那么它就会缩小。因此,在此之后,对于所有我确实收缩过的数据库,在写入新数据时都会发生一次自动增长。所以会有很多自动增长事件。那么会不会有问题呢?请告诉我一个解决方案。

sql-server maintenance shrink sql-server-2008-r2

7
推荐指数
2
解决办法
2848
查看次数