在Linux上,SQL Server在哪里存储“SQL Server密码策略”和SA用户的密码?我明白了,“密码”不安全。
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它太短。密码必须至少为 8 个字符..
进而,
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它不够复杂。密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、基数 10 的数字和符号。
我猜该策略实际上已编译到数据库中?密码会存储在一个不起眼的位置吗?
我试图理解read-ahead reading,但对我来说似乎有点复杂。我在网上搜索并得到以下信息:
从阅读页面(微软文档):
预读预期完成查询执行计划所需的数据和索引页,并在查询实际使用这些页之前将它们放入缓冲区缓存。
从对为什么在 SQL Server 中首次执行查询时“物理读取”少于“预读”和“逻辑读取”的回答?作者:huntharo 在 Stack Overflow 上:
物理读取 - 查询被阻塞,等待页面从磁盘读取到缓存中以供立即使用。
Read-Ahead Read - 页面在阻塞查询之前被读取,并像所有读取一样被读入缓存。当您扫描索引时,预读是可能的,在这种情况下,可以假定索引中的下一个叶页是需要的,并且可以在查询实际表示需要它们之前为它们启动读取。这允许磁盘在 db 引擎检查先前获取的页面的内容时忙碌。
也许有人可以使用他们自己的解释来澄清上述内容,因为我找不到预读的详细解释。
举个例子,看看statistics io信息:
Table 'TestLarge'. Scan count 1, logical reads 159185, physical reads 348, read-ahead reads 159209
Run Code Online (Sandbox Code Playgroud) varchar(5)当我在查询中使用时INSERT,这意味着表中的属性将在内存中占用5 个字节?(假设一个可打印字符占用一个字节)?
我们有一个 SQL Server 2014 Enterprise,其中 DIFF 备份失败。
这是我们收到的错误消息:
消息 3035,级别 16,状态 1,服务器 sqltest,第 1 行
无法对数据库“database1”执行差异备份,因为当前数据库备份不存在。通过重新发出 BACKUP DATABASE 来执行完整数据库备份,忽略WITH DIFFERENTIAL 选项。
分析以下查询的输出后,我们注意到第三方工具正在进行快照备份。
select top 20 bs.type,bs.database_backup_lsn,bs.checkpoint_lsn,bs.backup_start_date,bs.is_snapshot,
bs.is_copy_only,bs.user_name
from dbo.backupset bs
where bs.database_name = 'database1'
order by backup_start_date desc
Run Code Online (Sandbox Code Playgroud)
根据Pinal Dave 的说法,这些工具使用 VSS 进行备份,这不是正常的完整备份。
我不明白的是为什么LOG备份会成功?据我所知,它们也是基于最后一次完整备份的。
有人可以向我解释这种差异吗?
我正在关注作者(堆栈程序员)指出的这篇SO post
SQL Server 使用标识列作为键值来引用特定行。因此只能创建一个标识列。
他还提到
此外,如果没有明确声明标识列,Sql server 内部会存储一个单独的列,其中包含每行的键值。
谁能更详细地解释这两点(特别是第二点)?
谢谢
问题是关于未包含在“开始提交”块中的查询,而是关于 PostgreSQL、MySQL(至少是 innodb 引擎)中原子的普通插入和更新。那么这在内部是如何实现的呢?
这个问题发布在 Stack Overflow 上,但没有得到解答,我希望也许在这里我能找到答案。
我对数据库的理解是,如果在磁盘页面中找到查询或请求的记录,则整个页面将加载到主内存中。
例如,如果表的内容存储在磁盘页面中,如下所示:
+-------+------------+----------+-----------+--------+
| rowid | EmployeeId | Lastname | Firstname | Salary |
+-------+------------+----------+-----------+--------+
| 001 | 10 | Smith | Joe | 40000 |
| 002 | 12 | Jones | Mary | 50000 |
| 003 | 11 | Johnson | Cathy | 4000 |
| 004 | 22 | Jones | Bob | 55000 |
+-------+------------+----------+-----------+--------+
Run Code Online (Sandbox Code Playgroud)
假设索引是在 上完成的EmployeeId。
在主内存中加载页面后,如何搜索记录?(顺序或其他方法)
我想知道这是如何在 Oracle 以及其他一些(例如 Microsoft SQL Server)中执行的。
我想知道是否有人可以阐明我的担忧,即query_plan_hash碰撞可能导致查询作为完全不同的查询执行。
散列是一个 16 位的十六进制,sp_help sys.dm_exec_query_stats表示是一个二进制。因此它只是一个 64 位的散列,并且碰撞似乎很有可能(考虑到 SHA1 [160 位] 刚刚被验证有碰撞)。
请问plan_hash并query_plan_hash都有碰撞的这个(查询作为一个完全不同的查询被执行)的情况发生?
我也很好奇 SQL Server 中是否有设置允许我们将此哈希更改为 SHA2-512(以减少发生冲突的可能性)。我们的数据非常重要。
我通过 Google 和 Stack Exchange 论坛进行了高低搜索。
我知道,有人告诉我,微软在 MSDN 下有一个 per-dev doc 系统。具体来说,我正在寻找有关 WAL 日志内部格式的文档。这在任何地方都有记录吗?第三方肯定可以访问这个吗?
而且,无论如何,是否可以在不先付费的情况下知道 MSDN 记录的内容?
SQL Server 内部还有哪些其他文档来源?
我正在查看页面和范围分配的 SQL Server 2017 文档。
我从在线资源和 SQL 会议的会议中了解到:从 SQL Server 2016 开始,统一范围分配是默认行为。但是,MS文档描述的是:
为了提高空间分配效率,SQL Server 不会将整个区分配给具有少量数据的表。
- 统一范围由单个对象拥有;盘区中的所有八页只能由拥有对象使用。
- 混合区最多由八个对象共享。范围中的八个页面中的每一个都可以由不同的对象拥有。
新表或索引通常从混合区分配页。当表或索引增长到它有八页时,它就会切换到使用统一区进行后续分配
所以,我的问题是:在 SQL Server 2016 及更高版本中,如果我们创建新表或索引,最初会分配统一范围还是混合范围?
我刚刚去了一些资源说:
统一范围由单个对象拥有,混合范围最多可以由 8 个对象共享。
但是我无法理解他们的洞察力的含义,比如这种结构的好处是什么?基本上,我是这个领域的新手,所以如果你能提供一些直观的例子和应用程序,将不胜感激。
假设我有一个固定长度的列,我SELECT从中获取 100 行。当读取固定长度列的不同行时,SQL Server 是否检查每一行的列长度,还是检查一次并重用此信息,以便可以更快地读取后续行?
相反,对于可变长度列,SQL Server 需要使用偏移数组检查每行的每个可变长度列的长度。
所以我的问题是:SQL Server 是否检查每行的固定长度数据类型的长度(即在该行的状态位 A 和 B 部分之后)?从逻辑上讲,当它需要读取固定长度列时,只需要检查一次。
这种开销是索引最适合固定长度列的原因吗?
不试图解决任何问题,只是试图理解。
额外信息:关于索引最好在固定长度列上:当我阅读这篇文章“ SQL Server 性能的索引策略”时,整个问题就开始了。在某一时刻,它说:“聚集索引键应该很窄,但也使用固定宽度的数据类型。” 这一说法的理由是什么?我只能想到与我的问题相关的原因,即固定长度的列读取起来更便宜,因为长度只需要检查一次。
sql-server ×9
backup ×1
buffer-pool ×1
data-pages ×1
hashing ×1
index ×1
linux ×1
memory ×1
postgresql ×1
storage ×1
transaction ×1
varchar ×1