在Linux上,SQL Server在哪里存储“SQL Server密码策略”和SA用户的密码?我明白了,“密码”不安全。
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它太短。密码必须至少为 8 个字符..
进而,
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它不够复杂。密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、基数 10 的数字和符号。
我猜该策略实际上已编译到数据库中?密码会存储在一个不起眼的位置吗?
当我重新索引特定表时
\n\nDBCC DBREINDEX(@TableName, \'\',90) \nRun Code Online (Sandbox Code Playgroud)\n\n我收到一个错误
\n\n\n\n\n级别 17,状态 2,过程 aareindex,第 21 行 [批处理起始行 0]\n 无法为对象 \xe2\x80\x98dbo 分配空间。SORT 临时运行存储:\n 数据库 \xe2 中的 422738479742976\xe2\x80\x99 \x80\x98mydatabase\xe2\x80\x99 因为 \xe2\x80\x98PRIMARY\xe2\x80\x99\n 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
\n
所以我想尝试增加 TempDb 的大小
\n\n我可以通过查看数据库属性使用 SSMS 查看大小,但我不知道如何设置它。
\n\n[更新]
\n\nselect type_desc, name, size, max_size, growth from tempdb.sys.database_files\nRun Code Online (Sandbox Code Playgroud)\n\n回报
\n\n\n\n文件大小已为 10236 Mb,Express 限制为 10 Gig\n但是磁盘使用情况报告显示 26% 的磁盘空间未分配,40% 为数据,32% 为索引。
\n我有一个项目数据库,它维护来自不同环境(开发、测试、生产、predprod...)的不同数据库,我需要检查是否AUTO_CREATE_STATISTICS并AUTO_UPDATE_STATISTICSis设置为OFF/ON针对每个数据库以及是否将OFF其更改为ON.
ALTER DATABASE DB
SET AUTO_CREATE_STATISTICS ON
ALTER DATABASE DB
SET AUTO_UPDATE_STATISTICS ON
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我们的 SQL Server 面临性能问题。
7 台服务器,都运行相同的应用程序,都存在相同的问题。
SELECT @@VERSION
Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64) Jan 23 2020 21:00:04 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud)
当您查看累积的服务器总等待统计信息时,会显示 99% ASYNC_NETWORK_IO。我们首先假设这是由应用程序引起的。然而:
当我们获取查询(从应用程序捕获)并从 SSMS 中将其作为测试运行时,执行后忽略结果。当我们通过 TCP 连接运行它时,大约需要 6 秒,通过命名管道连接运行它大约需要 50 秒。我们得到的结果非常慢。
(不考虑执行后的结果,查询给出的结果为 57k 行 227 列,大小为 221MB。)
它是核心版本,因此我们无法使用本地连接。我们测试了使用 TCP 和命名管道进行远程连接。
通过 TCP
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time …Run Code Online (Sandbox Code Playgroud) 我的云提供商阻止我访问fn_LocalTimeToUTC和fn_UTCToLocalTime.
我将如何在不使用这些函数的情况下在 SQL 中手动和直接获得这两个函数提供的相同功能?
为了进一步简化,我们所有的用户都在英国。
我正在 SQL Server 2017 上运行加密备份。
进行测试恢复,失败:
RESTORE DATABASE [test]
FROM DISK = N'\\DPH-DD-SLI-001\SLI_SQL_Backups\Encrypted\DPH-SQL-SLI-12P\BTBLEAD\FULL\DPH-SQL-SLI-12P_BTBLEAD_FULL_20201021_185145.bak'
WITH NORECOVERY, REPLACE;
RESTORE DATABASE [test]
FROM DISK = N'\\DPH-DD-SLI-001\SLI_SQL_Backups\Encrypted\DPH-SQL-SLI-12P\BTBLEAD\DIFF\DPH-SQL-SLI-12P_BTBLEAD_DIFF_20201022_071002.bak'
WITH NORECOVERY;
Run Code Online (Sandbox Code Playgroud)
Processed 199264 pages for database 'test', file 'BTBLEAD_Data' on file 1.
Processed 2 pages for database 'test', file 'BTBLEAD_Log' on file 1.
RESTORE DATABASE successfully processed 199266 pages in 446.348 seconds (3.487 MB/sec).
Msg 3136, Level 16, State 1, Line 6 This differential backup cannot be restored
because the database has not been restored to …Run Code Online (Sandbox Code Playgroud) SQL Server 是否支持对同一数据库表的并行批量插入?
对我的特定用例的一些说明:
Session.bulk_insert_mappings()方法同时插入20k条数据。我的具体问题:
sql-server-2008 sql-server concurrency bulk-insert sql-server-2017
我有几百万行的表。它包含来自外部服务的日志,所以我决定不对其进行索引(大量插入,稀疏读取)。
当我运行从没有索引的表中读取的查询时,它需要(不出所料)很长时间。
但是,当我创建索引并运行查询然后删除索引时,速度要快得多(即使创建和删除索引也是如此)。
为什么创建临时索引更快,而不是让 SQL Server 做它的事情?这似乎不直观(为什么 SQL Server 不自己创建索引?)。这种方法有什么缺点吗?
有问题的查询看起来像这样,但我认为它不一定相关,因为我在其他地方也看到了类似的行为。
UPDATE Device
SET Col1 = l.Col1
,Col2 = l.Col2
,Col3 = l.Col3
FROM dbo.Device
OUTER APPLY (
SELECT MAX(Id) AS [Id]
FROM dbo.Logs
WHERE Logs.Device_FK = Device.Id
GROUP BY Logs.Device_FK
) lastLog
OUTER APPLY (
SELECT Col1, Col2, FORMAT(Col3) AS "Col3"
FROM dbo.Logs
WHERE Logs.Id = lastLog.Id
) l
Run Code Online (Sandbox Code Playgroud) 我按年份对现有表进行了分区。为 2020 年的某个日期插入新记录后,新记录将显示为 2020 年分区和主文件组的一部分。我很难确定这是否应该发生,或者我是否配置错误。
这是插入记录后分区的样子。在插入记录之前,此查询在主文件组中显示了 3 条记录,在 2021 组中显示了 3 条记录。
我期待 2020 分区中有一个新行,并且主文件组中的行数保持在 3,但也许这些是错误的期望。
主文件组是否总是显示分区的总数,或者行应该只显示在它们所属的分区中?
我可以展示我如何设置这一切,我很乐意,但这个问题更多的是关于结果应该是什么样子。我不希望多个分区中的同一行。
编辑
我刚刚找到了这个链接。这表明插入数据,其中新行的结果只有在正确的分区出现,而不是还处于初级。所以看起来我做错了什么。
https://www.sqlshack.com/how-to-automate-table-partitioning-in-sql-server/
编辑 2
主要有所有 4 行的原因可能是它的上边界为空。由于主要已经存在于表中,因此从未修改过。也许我需要修改它?
编辑 3
有趣的是,此链接还显示了主分区中的分区总和。
https://www.mssqltips.com/sqlservertip/2888/how-to-partition-an-existing-sql-server-table/
SSMS 为分区生成的脚本
USE [Sandbox]
GO
BEGIN TRANSACTION
CREATE PARTITION FUNCTION [PunchPF1](datetimeoffset(7)) AS RANGE LEFT FOR VALUES (N'2020-01-01T00:00:00-05:00', N'2021-01-01T00:00:00-05:00', N'2022-01-01T00:00:00-05:00')
CREATE PARTITION SCHEME [PunchPS1] AS PARTITION [PunchPF1] TO ([Pre2020_Punch], [2020_Punch], [2021_Punch], [2022_Punch])
ALTER TABLE [time].[Punch] DROP CONSTRAINT [PK_Punch] WITH ( ONLINE = OFF …Run Code Online (Sandbox Code Playgroud) 根据以下链接,NULL值占用一些存储空间:
/sf/ask/261182071/
https://www.sqlservercentral.com/forums/topic/null-storage-2
如果列具有固定宽度数据类型 -NULL占用列的长度
char(10) NULL takes 10 bytes
INT NULL takes 4 bytes
Run Code Online (Sandbox Code Playgroud)
如果列具有可变宽度 -NULL占用 0 字节
varchar(1000) NULL takes 0 bytes (+ 2 bytes of varchar column overhead ?)
Run Code Online (Sandbox Code Playgroud)
另外,拥有可为空的列也会产生开销。链接中的信息有点矛盾。
任何人都可以阐明这一点吗?
这是我的问题:
有人说可空列的开销是每行 1 位,有人说是每行 1 个字节,
哪一个是正确的?我假设每行 1 位(因此 8 行构成 1 个字节),对吗?
对于 varchar 中的 NULL 值,每行仍然有 2 个字节的开销 - 这是真的吗?
最重要的问题:
我有一个包含约 2.5 亿行数据的表,总大小约为 115 GB
我使用下面的代码添加了 7 列,在每个命令后使用 sp_spaceused 检查表的大小
添加的列:
alter table MyTable add TestVarchar10 varchar(10) …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql-server-2017 ×10
t-sql ×2
backup ×1
bulk-insert ×1
concurrency ×1
functions ×1
linux ×1
null ×1
partitioning ×1
storage ×1
waits ×1