我有一个可容纳 100.000 名玩家的高分表,每天插入 2 次,每个玩家一条记录。在一天结束时,该表中索引的索引碎片为 99%。有没有办法通过调整设置来防止这种情况?
CREATE TABLE HighScore(
[id] [int] IDENTITY(1,1) NOT NULL,
[user] [int] NULL,
[player] [int] NULL,
[round] [tinyint] NULL,
[group] [int] NULL,
[rank] [int] NULL,
[delta] [int] NULL,
[roundpoints] [int] NULL,
[totalpoints] [int] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [HighScore_RoundGroup_Nidx] ON .[HighScore]
(
[round] ASC,
[group] ASC
)WITH …Run Code Online (Sandbox Code Playgroud) MSDN 说实数的范围是 - 3.40E + 38 到 -1.18E - 38, 0 和 1.18E - 38 到 3.40E + 38。显然真正的下限要低得多。以下脚本使用 1.401298E-45 填充 REAL 列:
CREATE TABLE a
(
r1 REAL NULL ,
r2 REAL NULL ,
r3 REAL NULL
) ;
GO
INSERT INTO a
( r1, r2 )
VALUES ( 1.18E-37, 10 ) ;
GO
DECLARE @i INT ;
SET @i = 1 ;
WHILE @i < 20
BEGIN ;
UPDATE a
SET r1 = r1 / r2 ; …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server sql-server-2008-r2 data-integrity
我正在记录我的数据库,我想在我的数据库中创建一个所有索引的列表。我想这样做的原因是,我可以加班跟踪索引的更改。我目前有一个电子表格,其中包含自我创建该电子表格以来已更改的所有索引,但它没有所有索引。我希望能够生成列表,而不是编写每个索引的脚本。我玩过系统视图,但我无法弄清楚。
如何为每个索引生成索引列表和创建语句?
我刚刚开始了解 SQL Server 上的内存使用情况。在问题SQL Server 2008 R2“Ghost Memory”的答案中使用查询时?,我发现单个数据库占用了缓冲池中的大部分空间。进一步看,使用sys.allocation_units和sys.indexes,我确认这可能是由于大量使用数据库中的索引造成的。大多数索引都是聚集的。
另一位数据库开发人员认为我们在服务器上存在内存问题 - 由于没有可用内存,查询开始运行很长时间。
我的问题是 - 这些索引的使用以及它们在缓冲池中的存在是否会占用其他进程可用的内存?
我希望能够预测 DELETE 是否会违反约束,而无需实际执行删除。
我有什么选择来做这件事?有没有一种简单的方法可以对 DELETE 进行“试运行”?
每次我重新启动我的服务器时,数据库总是处于恢复模式,它需要大约 20 分钟才能正常运行。这总是并且只有在我重新启动服务器时才会发生,所以我有几个问题......
我目前正在使用 Microsoft SQL Server 2008。
在传统的 SQL Server 群集中,当发生故障转移时,所有连接到 SQL Server 失败实例的客户端都会失去连接,每个客户端都必须重新建立到故障转移群集实例的新连接。
AlwaysON 可用性组是否可以缓解此问题?SQL Server 2012 AlwaysON 可用性组的故障转移对于连接到 SQL Server 的客户端是否透明?
sql-server-2008 sql-server sql-server-2012 availability-groups
我们正在使用 SQL Server 2008 R2,并且有一个非常大(100M+ 行)的表,其中包含一个主 id 索引和一个datetime包含非聚集索引的列。我们看到了一些非常不寻常的客户端/服务器行为,这些行为基于专门针对索引日期时间列的order by子句的使用。
我通读了以下帖子:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow 但客户端/服务器上发生的事情比实际发生的更多这里开始描述。
如果我们运行以下查询(编辑以保护某些内容):
select *
from [big table]
where serial_number = [some number]
order by test_date desc
Run Code Online (Sandbox Code Playgroud)
每次查询都会超时。在 SQL Server Profiler 中,对服务器执行的查询如下所示:
exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * .....
Run Code Online (Sandbox Code Playgroud)
现在,如果您将查询修改为:
declare @temp int;
select * from [big table]
where serial_number = [some number]
order by test_date desc
Run Code Online (Sandbox Code Playgroud)
SQL Server Profiler 向服务器显示执行的查询如下所示,它立即工作:
exec sp_prepexec @p1 output, NULL, N'declare @temp int;select * …Run Code Online (Sandbox Code Playgroud) 我在VIEW DEFINITION为我的一个用户在架构级别适当设置权限时遇到问题。我已经创建了架构TestSchema并添加了一些表。用户目前有权限设置为访问和修改表(SELECT,UPDATE,DELETE通过等)dbo_datareader和dbo_datawriter角色。但是,他们看不到 SSMS 对象资源管理器中的任何表。
我试过授予查看定义的权限:
grant view definition on SCHEMA :: [TestSchema] to [User]
Run Code Online (Sandbox Code Playgroud)
那没有用。我尝试设置表级权限:
grant view definition on [TestSchema].[NewTable] to [User]
Run Code Online (Sandbox Code Playgroud)
那也没有用。然后我尝试了一个全面的资助:
grant view definition to [User]
Run Code Online (Sandbox Code Playgroud)
那确实奏效了;他们现在可以看到TestSchema,以及他们不应该访问的其他模式。
我的目标是允许用户查看给定模式中的所有表。我如何做到这一点?如果默认情况下我应该能够执行此操作,我应该查看哪些权限才能找到为什么不能执行此操作?
我正在尝试通过给出命令来映射另一台服务器
EXEC xp_cmdshell
'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes'
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
找不到网络路径
但我可以手动映射另一台服务器。请帮我解决这个问题。