我观察到生产环境中的 tempdb 在初始化后已经增长到 100 GB。
我知道由于服务器负载和一些昂贵的查询导致 tempdb 在短短两天内增长。我已经观察了一个多星期,发现这个尺寸没有进一步增长并且保持不变。
我在具有 8 个逻辑核心的服务器上为 tempdb 配置了一个 mdf 文件。虽然我可以根据逻辑核心添加多个 mdf 文件。
我观察到空闲页面大小和临时数据库数据文件的物理大小在我的情况下是相同的
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)
帮助我了解是否会在不显式执行脚本以缩小空间或通过重新启动服务器以重置临时数据库分配的情况下自动回收此物理空间?
我真的不明白什么时候需要将数据库设置为离线。
我用谷歌搜索,我确实找到了任何信息或示例,我应该在哪里以及为什么将数据库设置为离线。
如果您能给我一些需要使我的数据库脱机的示例和案例,我将是完美的。
我在带有一个数据库的 Azure VM(Windows Server 2012 R2)上安装了 Microsoft SQL Server 2014。是否可以为我的 Google Drive 文件夹配置自动备份?也许是特殊工具或其他东西?
我试图减少我们应用程序数据库上的巨大性能问题。我们使用 SQL Server 2014,我们有很多视图。
我想知道重写左连接以在预测中使用存在是否有重大影响?
我的问题是:在构建根据相关匹配项的存在投射不同数据的查询时,是否有任何有关性能的最佳实践?
我的意思是,这些查询中的哪一个可以被认为更好?
1):
select
a.Id,
case when b.Id is not null
then convert(bit,1)
else convert(bit,0)
end IsActive
from A a
left join B b on a.Id = b.Id;
Run Code Online (Sandbox Code Playgroud)
2):
select
a.Id,
iif(exists(select top 1 1 from B where Id = a.Id),
convert(bit,1),
convert(bit,0)
) IsActive
from A a;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。
如何where col % 5 = 4在 SQL Server 中重写。重写这个的原因是因为我根据这个条件从表中选择了一些列。因为 % 用于导致索引扫描而不是搜索的地方。这个你能帮我吗。
我需要在一张表中包含 2 个标识列。一个是正常身份,另一个将每年重置。
我DBCC CHECKIDENT ('TestTable', RESEED, 0)在插入程序的帮助下完成了重置部分。
但除了这个,我不知道如何拥有一个正常的身份。解决方案可能使用两个表,但我更喜欢将它们都放在一个表中。
在最后一天更新表中的列时,我们的高级 DBA 向我展示了一种减少读取和争用的新技术。
伪代码是
WHILE
[always true condition]
BEGIN
UPDATE [...]
IF @@ROWCOUNT = 0 BREAK;
END
Run Code Online (Sandbox Code Playgroud)
但是,在运行此程序时,我不小心将“包含实际执行计划”留在了“消息”选项卡中,因此我看到重复出现此情况:
(1000 row(s) affected)
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
但是代码有效并且 WHILE 循环有效!
我的问题是,如果包括实际执行计划返回 1 行受影响,这不应该创建一个无限循环吗?
为什么没有被计算在内?
示例表如下:
USE [tempdb];
GO
CREATE TABLE [dbo].[UpdateMePlease]
([ID] INT IDENTITY(1, 1), [UselessNote] VARCHAR(10) DEFAULT 'Delete me!', [UpdateValue] VARCHAR(10) NULL)
GO
INSERT INTO [dbo].[UpdateMePlease] ([UselessNote]) DEFAULT VALUES;
GO 10000
SELECT * FROM [dbo].[UpdateMePlease];
/* turn Actual Execution Plan on here */
WHILE 1 = 1 BEGIN
UPDATE TOP (1000) [dbo].[UpdateMePlease] …Run Code Online (Sandbox Code Playgroud) 我运行以下代码,收到语法错误。
SQL Server 2012 Express(版本 11)操作系统:Windows 7 家庭高级版(x64 位)
服务器抱怨我在 附近有语法错误ROWTERMINATOR='\n',我无法弄清楚问题的原因是什么。
我不明白如何在批量插入博客中使用引号 '''+@datapath+'access1.log''
我的理解是我应该使用双引号来表示单引号。
这是我的代码:
declare @datapath varchar(128);
set @datapath =
'C:\Users\admin121\sql-server-2014\sql2012_class3_20141028\WebLog\';
exec
('
bulk insert weblog from '''+@datapath+'access1.log''
with
(
firstrow = 1,
FIELDTERMINATOR =' ',
ROWTERMINATOR='\n',
MAXERRORS=99999999
)
');
Run Code Online (Sandbox Code Playgroud) 我想根据membershipType 列设置我的默认列Y 或N。根据membershipType 列中的3 个不同值,defaults 列中只能有一个Y。除此之外,其他人将是 N。我该怎么做?
ID titlePromo membershipType defaults
-- ---------- -------------- ------
1 Promo 1 Membership Promotion Y
2 Promo 2 Membership Renewal Y
3 Promo 3 Membership Grad Y
4 Promo 4 Membership Promotion N
5 Promo 5 Membership Promotion N
6 Promo 6 Membership Grad N
Run Code Online (Sandbox Code Playgroud) 我有一个表Vendors,其中包含一列VendorContactFname,该列以小写形式编写。
我只想大写它的第一个字母。我想在左边的第一个字母上连接一个 Upper,所有其他剩余的字母都以其原始的小写字母连接到它的右边,即与子字符串:
Upper(Left(VendorContactFname,1) ) +
Substring('VendorContactFName',2, Len('contactFname')-1 )
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
sql-server ×10
azure-vm ×1
backup ×1
bulk-insert ×1
disk-space ×1
identity ×1
t-sql ×1
tempdb ×1