我们确实为 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数据库的用户只有public在同意server roles且仅用于特定的数据库db_datareader,并public随后试图允许script index as CREATE To在SSMS选项,生成的脚本不正确。
我的意思是,如果索引具有过滤条件,则不会显示该过滤条件
所以对于拥有所有者权限的用户script index as CREATE To将显示
USE [test]
GO
/****** Object: Index [filtered] Script Date: 12/30/2013 18:54:19 ******/
CREATE NONCLUSTERED INDEX [filtered] ON [dbo].[Table_1]
(
[b] ASC
)
WHERE ([Table_1].[b] IS NULL)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
对于只有 …
我指的是 SQL Server 查询执行计划来获取查询成本,然后通过查看计划来优化所需的东西。
但单个查询成本的总和超过 100%。
这是我的查询:
DECLARE @date SMALLDATETIME
SELECT Reffd AS NAME
,(
SELECT (
(
SELECT count(*)
FROM [cal_reg].[dbo].[customer]
WHERE upper(Reffd) = upper(main.reffd)
AND cast(DATE AS SMALLDATETIME) = @date
) + (
SELECT count(*)
FROM [cal_reg].[dbo].[rep]
WHERE upper(Reffd) = upper(main.Reffd)
AND cast(DATE AS SMALLDATETIME) = @date
)
)
) AS Completed
,(
SELECT (
(
SELECT count(*)
FROM [cal_reg].[dbo].[customer]
WHERE upper([call Attnd]) = upper(main.[Reffd])
AND cast(DATE AS SMALLDATETIME) = @date
) + (
SELECT count(*)
FROM [cal_reg].[dbo].[rep] …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要 sql server 的软件。但是对于 50 MB 的应用程序,告诉客户安装 SQL Server 并不是一个好主意。所以我认为最好使用 SQL Server Express LocalDB。
我想提供从局域网访问我的应用程序的功能。但我没有得到任何相关的主题来做到这一点。
是否可以在局域网上访问 SQL Server Express LocalDB?
与 SQL Server 相比,SQL Server Express LocalDB 有哪些限制?
下面的查询用于插入和更新 SQL Server 数据库中的表。第一次在 SSMS 中执行时,XQuery 很慢。
插入新的 <ROW>
Update BalanceTable set [daily_balance].modify('
insert <Row><date>2007-05-10</date><Balance>-8528</Balance><Transactiondr>835</Transactiondr><Transactioncr>9363</Transactioncr><Rowid>2</Rowid></Row>
as first into (/Root)[1]')
where [daily_balance].exist('/Root/Row[date=''2007-05-10''] ')=0
and [daily_balance].exist('/Root')=1
and [AccountID]=61
and [Date] = '31-May-2007';
Run Code Online (Sandbox Code Playgroud)
修改余额
Update BalanceTable
set [daily_balance].modify('
replace value of (/Root/Row[date=''2007-05-10'']/Balance/text())[1]
with (/Root/Row[date=''2007-05-10'']/ Balance)[1] -3510')
where [AccountID]=577
and [Date]='31-May-2007'
and [daily_balance].exist('/Root/Row[date=''2007-05-10'']')=1;
Run Code Online (Sandbox Code Playgroud)
修改事务
Update BalanceTable
set [daily_balance].modify('
replace value of (/Root/Row[date=''2007-05-10'']/Transactioncr/text())[1]
with (/Root/Row[date=''2007-05-10'']/ Transactioncr)[1] +3510')
where [AccountID]=577
and [Date]='31-May-2007'
and [daily_balance].exist('/Root/Row[date=''2007-05-10'']')=1;
Run Code Online (Sandbox Code Playgroud)
USE [Fitness Te WM16]
GO
SET ANSI_NULLS ON
GO
SET …Run Code Online (Sandbox Code Playgroud) 我正在使用 SSMS 和具有足够权限的用户访问 SQL Server。
当该用户尝试使用 SSMS 附加数据库时(通过右键单击数据库节点,然后单击附加),他们会收到一条错误消息:
无法显示请求的对话框。
参数名称:nColIndex
实际值为 -1。(Microsoft.SqlServer.GridControl)
在 Microsoft.SqlServer.Management.UI.Grid.GridControl.SetColumnWidthInternal
(Int32 nColIndex, GridColumnWidthType widthType, Int32 nWidth)
...
在 Microsoft.SqlServer.Management.SqlManagerUI.AttachDatabase.SetGridColumnWidth
(SqlManagerUIDlgGrid grid, Double[] columnWidthRatio, Int32 columnIndex)
...
如果同一个用户使用如下的 T-SQL 命令,那么它工作正常:
CREATE DATABASE [hgnx] ON
( FILENAME = N'E:\db\hgnx.mdf' ),
( FILENAME = N'E:\db\hgnx_log.ldf' )
FOR ATTACH
Run Code Online (Sandbox Code Playgroud) 我正在使用 sql server 2008 r2 express。当我使用导入数据功能将数据从一个数据库导入到另一个数据库时,我遇到了一些问题。我正在使用 SSMS 来做到这一点。在使用向导时,我选择“选择身份插入”选项来复制身份元素属性。通过使用此标识元素可以正确导入。但是导入后我比较了源数据库和目标数据库,发现了一些变化!!表中的所有 NULL 值都被 0 替换。那么我该如何避免它。在使用导入数据向导时,是否有任何选项可以将其复制为它?请帮忙
如果在具有“读取已提交快照”隔离级别的表上运行更新并且提交未决
例如:
update table1 set col1 = col1 + 1 where PKcol < 3update table1 set col1 = col1 + 1 where PKcol = 3update table1 set col1 = col1 + 1 where NonPKcol < 3update table1 set col1 = col1 + 1 where NonPKcol = 3update table1 set col1 = col1 + 1 where PKcol < 3 and NonPKcol = 5在上述情况下,PKcol 是表中的主键,而 NonPKcol 是非主键。
是否只为满足“where”条件的行锁定更新?它是基于值、索引还是主列?
在 SQL Server 中,每个数据库都有一个属性Initial Size (MB),可以在 SSMS 的数据库属性中看到。默认情况下,mdf 文件为 3 MB,ldf 文件为 1 MB。
所以现在如果创建一个新数据库,那么它将被设置为默认大小(即 mdf 为 3 MB,ldf 文件为 1 MB)。但是在创建数据库后,我将初始大小更改为其他一些值,例如 For mdf 10 MB 和 ldf 5 MB。(实时某些数据库管理员可能希望在创建数据库后更改初始大小)
但是现在如果缩小数据库,它将缩小到我在创建后设置的初始大小之外(考虑数据库中没有数据,否则它将缩小到其实际内容大小)。它会缩小到创建数据库时的初始大小(即 mdf 为 3mb,ldf 为 1mb)。我希望缩小到我设置的初始大小(即 mdf 为 10 mb,ldf 为 5mb)。可以做到吗?如果可能,那么如何?
在一些文章中,我看到 dbcc SHRINKFILE 可用于缩小超过初始大小,而 dbcc SHRINKDATABASE 不能缩小超过初始大小。但我只想缩小到我设置的初始大小。
注意:我知道收缩不好,不应该做。但我想知道怎么做?如果sql server只考虑创建数据库时设置的初始大小,那么创建数据库后设置初始大小有什么用?
编辑:
来自微软收缩相关文章:使用 DBCC SHRINKDATABASE 您不能将数据库收缩到其初始大小以下。
我的问题是我可以更改现有数据库本身的初始大小吗?
编辑:
我有大约 5 个 sql server 实例。创建的所有数据库的数据默认大小为 3 mb,日志大小为 1 mb(大约 3 年前)。现在所有的数据库都在 100-1000 mb 的范围内。我不会正常收缩数据库,因为这不是一个好习惯。但是一些数据库增长超过 10 GB(mdf 文件本身,因为我在其中插入了如此多的数据)。因此,当数据库很大时,我会将不重要的旧内容从该数据库转移到另一台服务器,因为该服务器不需要我。这样数据库大小从 10 GB …
我已经问过一些关于自动增长和收缩的问题。但我对此有一些疑问。
我有一个每月增长约 300 MB 的数据库。那么最好将 Autogrowth 设置为 300 MB 吗?现在设置了 10 MB。
我有很多小型数据库,它们确实有大约 50 MB 的数据。但它的物理大小约为 900 MB。(所以 850 是可用空间)。我没有缩小这个数据库。好像我在添加数据时再次缩小它会发生自动增长。但是向这个数据库添加数据是很少见的。所以我认为未来一年它不会增长超过 200MB。
那么我应该缩小数据库吗?如果我保持原样?这会导致任何性能问题吗?或者在数据库中有更多的可用空间(超过 90%)会导致任何问题?我认为大多数人认为大的物理尺寸会导致性能问题。那么这是真的还是假的?
SQL Server 2008 R2 Express 数据库大小限制为 10 GB。那么它是 mdf 和 ldf 文件的物理大小吗?因为如果我应该在任何时候缩小数据库,我需要考虑这一点。
sql-server ×10
ssms ×4
shrink ×3
maintenance ×2
import ×1
index ×1
locking ×1
permissions ×1
transaction ×1
xquery ×1