对于 MySQL,我知道数据库是在 SQL 语句中逐表备份的,这会导致锁定,如果在备份时更新列,则最终可能会出现完整性问题。
据我了解,这不适用于 Microsoft SQL Server,但 SQL Server 是如何处理的?是否有一些内部冻结来保持数据库一致?
我还听说备份是单线程的,这意味着它只使用一个核心,假设您备份到单个文件。还假设您有一台多核机器,例如 16 核,或者至少比 1 多得多。
根据我的个人经验,我在备份时从未遇到过问题,既没有锁定也没有开销问题,但我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩。
那么当备份作业正在运行时会发生什么?不同版本是否也有显着差异?例如 2008、2012 和 2014(不是许可证)。
假设我找到了一个 SQL Server,但我不知道哪些应用程序连接到它。也许我找到了一个应用程序,但我不确定它是否是唯一一个使用它的应用程序。
有没有找到所有不同连接的好方法?
创建备份时,SQL Server 会猜测(?)初始备份文件的大小。稍后,也许当它附加日志时,大小会被重新调整,有时会多次调整,直到达到最终大小。差异越大,备份所需的时间就越长。(与另一个备份相比,稍后不会调整大小)。示例:Database1(大小为 500GB,使用了 70GB 的日志)通过压缩进行备份。创建的 .bak 文件大小为 85 GB,一段时间后 CPU 使用率上升,我可以看到 .bak 文件重新调整为 136 GB,这种情况再次发生,直到备份的最终大小为 178GB到达。
当这些重新计算发生时,与同一台机器上的其他备份相比,以 MB/s 为单位的平均备份速度会降低。唯一来自附加和清除日志吗?还是因为数据库中使用的数据类型不同?意味着它们以不同的压缩率压缩,或者其他什么?
我来到这个话题,因为我知道我的备份需要大约 30 分钟,但现在即使数据库没有增长到其大小的 300%,也需要 1.5 小时。它仅增长了 30%。
使用等待统计数据,我可以看到除了 BackupIO 之外,我还在某个时候等待 CPU (SOS_SCHEDULER_YIELD)。
Machine Details:
VMWare 6.0
32 GB of Memory (Max memory 28GB given to SQL Server)
2 logical CPU
Max Degree of Parallelism (1, it's a Sharepoint 2013)
SQL Server 2014
Windows Server 2012 R2
running on an SSD Raid (5)
Run Code Online (Sandbox Code Playgroud)
当然,我为运行备份的用户启用了即时文件初始化。
基于该 msdn 页面: 服务器内存设置,最好保留 SQL-Servers min 和 max memory 的默认值以使其保持动态...
根据我通过教程学到的知识,您应该始终定义一个最大值,关于最小值,我没有听说过太多。我正在使用简单的旧 perfmon 监视我的页面文件,我意识到很少发生磁盘交换,一旦它几乎导致服务器崩溃。
这可能与 SQL Server 中的默认最大内存设置有关吗?数据库大约为 150 GB,内存为 48 GB,该机器上没有其他应用程序在运行。
另外,为什么你应该有一个最小值?我知道太低的值会阻止 SQL-Server 启动,我知道 SQL-Server 将内容保存在内存中,因此不会尝试释放它的缓存。
我正在使用 SQL-Server 2012,在此先感谢您!
我将 SQL Server 2012 Standard 放在一个虚拟机 (VMWare) 上,该虚拟机具有大约 98GB 的内存。
现在我检查了下面的查询 SQL Server 占用了多少内存。
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
Run Code Online (Sandbox Code Playgroud)
并且看到他已经吃掉了 81GB 的内存,并且最大内存设置为 ~90GB。
使用:
select (physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 ) VAS from sys. dm_os_process_memory
Run Code Online (Sandbox Code Playgroud)
SQL Server 2012 Standard 应仅支持 64GB 内存。
为什么我的 SQL Server 吃的比他能吃的多?还是信息不正确?
任何的想法?这与使用虚拟内存的虚拟机有关吗?
我不知道 VM 主机上是否激活了气球驱动程序...
如果您需要更多信息,我会添加它。
我需要一种很好的方法来在不同服务器和不同数据库之间复制 SQL Server 2012 中的单个表。我试过复制品,它工作得很好,但可能有更好/更简单的方法,我现在看不到。
也许有一种方法可以使用任务将数据作为作业导入。数据不需要一直同步。每隔 5-10 分钟,第二个数据库 [B] 就可以使用数据库 [A] 中的数据进行更新。
是否可以只为一张表设置镜像?
当然,我检查了网络,这给了我编写导入任务脚本的想法。
还有什么可能以及如何?
我是 Sharepoint 的新手,但我曾经经常使用 SQL Server。我意识到 Sharepoint 将一些 SQL Server 设置更改为非默认值。一个是最大并行度,为什么sharepoint不像并行计划执行那样?另外我为什么要关闭“自动更新统计信息?我找不到这两个问题的答案。我在 Sharepoint 2013 上
我有一个数据库,其中包含一个值、一个以字节为单位的共享大小和一个共享名。这非常准确,但对我的最终用户没有用。因此我将值转换为 GB。通过使用简单的划分效果很好。
让我们假设我的数据库由两列组成。共享名和共享大小。
Sharename | Sharesize
Run Code Online (Sandbox Code Playgroud)
Share 1 |71685107549
Now I run this:
SELECT TOP (1000)
[Sharename]
,[ShareSize]
,(ShareSize / 1e+9) SharesizeGB
FROM [mydb].[dbo].[myshares]
Run Code Online (Sandbox Code Playgroud)
输出是:
ShareSize SharesizeGB
71685107549 71,685107549
Run Code Online (Sandbox Code Playgroud)
现在我需要用“点”替换“,”并将结果四舍五入到点后只有两位数字。
是否可以仅使用 select 语句?
对于我的示例,不需要除以 1024。
当我浏览 DBA-Reactions 时,我几乎理解了所有的 .gif,但是使用这个我遇到了麻烦:
https://twitter.com/DBAReactions/status/613840893322338304
我的意思是 truncate 显然不会像批量删除那样创建事务日志,但仍然存在您非常确定可以简单地截断完整表的情况。除此之外还有其他的顾虑吗?所以基本上我很想了解完全不同。
sql-server ×8
backup ×2
memory ×2
performance ×2
compression ×1
connections ×1
select ×1
sharepoint ×1
truncate ×1