Alter TABLE [XXX] Alter column [YYY] [varchar](max) NULL
Run Code Online (Sandbox Code Playgroud)
认为
varchar(8000)现在可以更新(可写)。一些其他信息:
NULLthis 中varchar(8000);相关@@VERSION详情:
Microsoft SQL Server 2014 - 12.0.4422.0 (X64)
企业版(64 位)
我发现很多的ShrinkD,ghostcleanuptask和BTree Split/Shrink我的SQL Server日志。
在这些记录事件的时候,性能计数器显示lazy writes很慢,日志刷新率很高,write/sec接近30000,磁盘IO也很高。
我确定服务器流量是正常的,当时没有出现数据文件异常增长,但是日志文件比平时大了一倍。我使用该dump_log()函数来获取日志的统计信息:
我的配置:
我最近:
每天4:00-5:00存档,我怀疑ghost清理和我的物理备份删除和存档有关。日志文件是昨天同一时间的两倍。
我的问题:
我有一个 10 GB 大小的 SQL Server 数据库。当我执行备份时,花了将近 3-4 分钟。当我尝试恢复时,几乎花了同样的 3-4 分钟。
这是否意味着 SQL Server 数据库的备份和恢复时间总是相等的,还是可以不同?
请建议并指出我背后的逻辑。
我有一个事件表,聚集索引是创建日期/时间。
通常情况下,在同一毫秒内永远不会发生两个事件,但会发生异常事件,因此该列不一定是唯一的。
我想添加一个 uniquifier 列,即在给定时间内插入的第一个行为 0,第二个为 1,依此类推:
TIME UNIQUIFIER, TEXT
2018-01-01 01:23:45.678, 0, "aaa"
2018-01-01 02:00:00.000, 0, "bbb"
2018-01-01 02:00:00.000, 1, "ccc"
2018-01-01 02:00:00.000, 2, "ddd"
2018-01-01 03:45:67.890, 0, "eee"
Run Code Online (Sandbox Code Playgroud)
我知道当我创建聚集索引时,MS Sql Server 会自动创建这样一个列。但是该列是隐藏的。
我想要一个可见的 uniquifier,它的行为就像这个隐藏的一样,所以我可以在外键关系中使用它。
也就是说,当...
...我可以Time:2018-01-01 02:00:00 / Uniquifier:0用作外键,知道该行存在,而无需在第一个表中查找事件。
我可以使用自动递增的标识列来使键唯一,但这意味着我无法在不知道标识列的情况下引用事件。
例如,如果我想在单独的 1-n 表中创建事件和一堆额外的事件信息,我必须首先创建事件,然后查找其标识列,然后才创建相关信息,使用它身份栏。我试图避免往返。
是否有可能在 SQL Server 中使用自动值填充这样一个可见的列,与隐藏的 uniquifier 列相同?
还是在插入行时必须手动计算这样的列?
sql-server sql-server-2014 unique-constraint computed-column
我的数据库初始大小为 370GB。
当我检查时EXEC sp_spaceused,我可以看到几乎 360GB 的未分配空间。
未分配的空间是否意味着未使用的空间?如果它是未使用的空间,为什么会导致存储问题?
除了使用 360GB 的未分配空间缩小 .mdf 文件之外,我还有哪些选择?
另外,由于这是一个巨大的数据库,我可以在下面的“x”位置提到什么级别的增量 - 每次缩小时我可以从 10,000 MB 开始吗?
USE Demo
GO
DBCC SHRINKFILE (N ‘Demo’, x)
GO
Run Code Online (Sandbox Code Playgroud)
在这种情况下,还有什么我应该考虑的吗?
添加新的数据文件会有帮助吗?
performance database-design sql-server shrink sql-server-2014
我正在尝试获取与由我的数据库中的登录名表示的 AD 组关联的用户列表。我从我的研究中了解到,最好的方法是使用以下代码:
{
Server srv = new Server();
//Iterate through each database and display.
foreach ( Database db in srv.Databases) {
Console.WriteLine("========");
Console.WriteLine("Login Mappings for the database: " + db.Name);
Console.WriteLine(" ");
//Run the EnumLoginMappings method and return details of database user-login mappings to a DataTable object variable.
DataTable d;
d = db.EnumLoginMappings();
//Display the mapping information.
foreach (DataRow r in d.Rows) {
foreach (DataColumn c in r.Table.Columns) {
Console.WriteLine(c.ColumnName + " = " + r[c]);
}
Console.WriteLine(" "); …Run Code Online (Sandbox Code Playgroud) 我有一个基于 col1 int 分区的分区表。我还有一个覆盖索引,用于我尝试解决的查询。
https://www.brentozar.com/pastetheplan/?id=BkNrNdgHm
以上是计划
任其发展,SQL Server 决定对整个表进行聚集索引扫描,这显然很慢。如果我强制索引(如上面的计划),查询会快速运行。
SQL Server 使用什么魔术逻辑来确定覆盖索引没有用?我不确定 top/orderby 和 rowgoal 是否与它有关。
我的表结构是
Create table object2(col1 int, col3 datetime, col4 int, col5, col6 etc) clusterd on col1
nonclustered non aligned index is on col3,col4 (col1 is clustered so its included in nonclust)
SELECT top(?) Object1.Column1
FROM Object2 Object1 WITH (NOLOCK,index(Column2))
WHERE Object1.Column3 >= ?
AND Object1.Column4 IN (?)
ORDER BY Object1.Column1
Run Code Online (Sandbox Code Playgroud)
编辑添加的回购
CREATE PARTITION FUNCTION [PFtest](int) AS RANGE RIGHT FOR VALUES (100000, 200000, 300000, 400000, 500000, …Run Code Online (Sandbox Code Playgroud) performance sql-server optimization sql-server-2014 query-performance
我有一个棘手的问题,我不知道在哪里可以找到相关信息。
我在数据库服务器上安装了 SQL Server 2014 Enterprise。在这台服务器上存在多个数据库,有些属于我们,有些属于其他公司。
我关心的是缓存。我对 SQL Server 如何使用缓存内存快速检索数据页有基本的了解。你运行一个查询,通常,数据页被加载到缓存中,并且通过可重复的调用,它从中获得结果。
但是......我们的应用程序在我们的客户通常的工作时间被大量使用,但在晚上总是有维护任务在进行。我假设(如果我错了请告诉我)在白天,缓存加载了有用的数据页面,但在晚上由于维护任务而被删除,因此第二天,当客户开始进行交易时,数据页必须首先再次加载到缓存中,这需要时间并减慢很多事情的速度。
那么,我能以某种方式证明这种情况是否发生吗?
如果是,我可以管理吗?例如以某种方式告诉 SQL Server 不加载到缓存中?
我将不胜感激一些讨论这个话题的具体文章。我找不到任何,或者更好地说,我不知道如何命名这个问题。
我正在运行以下更新命令
UPDATE table
SET [End] = '2018-12-17'
WHERE (ID = '5b010204-c12c-4b38-8d28-affe11684da0')
Run Code Online (Sandbox Code Playgroud)
什么会导致 SQL Server 14 出现这种情况?
我正在查询包含电影票的表。数据库包含 380k 行。一行代表电影的放映(哪家电影院,什么时候,有多少票,什么价格等等)。
我需要计算几个总计为每一行:Admissions Paid,Admissions Revenue,Admissions Free和Total Admissions。
对于给定的行,Admissions Paid是该电影的所有门票的总和,直到price>0. 其他 3 列的计算方法类似。
我写了一个查询并创建了一个索引:
SELECT [ID]
,[cinema_name]
,[movie_title]
,[price]
,[quantity]
,[start_date_time]
,* --I need all the columns for reporting
,(select SUM(quantity)
from [movies] i
where i.movie_title=o.movie_title
and i.start_date_time<=o.start_date_time
and price=0) as [Admissions Free]
,(select SUM(quantity)
from [movies] i
where i.movie_title=o.movie_title
and i.start_date_time<=o.start_date_time
and price>0) as [Admissions Paid]
,(select SUM(quantity*price)
from [movies] i
where i.movie_title=o.movie_title
and i.start_date_time<=o.start_date_time
and price>0) …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql-server-2014 ×10
performance ×2
alter-table ×1
backup ×1
ddl ×1
optimization ×1
permissions ×1
restore ×1
shrink ×1