我正在考虑在 VPS 上安装 SQL Server Express Edition。
我的理解是,在 Express Edition 的限制中,其中一些涉及便于备份的功能。
有人可以解释一些为此配置执行每日备份的选项吗?有没有直接的方法,还是我需要购买额外的软件?
(对不起,如果这个问题看起来很愚蠢。我是一名软件开发人员,根本不是数据库或管理员。)
2 天前,我创建了一个需要INSERT和的函数,UPDATE我XP_CMDShell通过运行脚本启用并执行它。
之后,SQL Server 的SELECT命令运行速度非常慢。即使SELECT是INSERT通过分隔命令运行的非常简单的语句。
我在其他数据库上测试了这种行为,它SELECT在几分钟后运行得到相同的结果。
此外,我使用 SQL Server 2014 在其他 2 台主机上对其进行了测试,结果相同。
我创建的函数是为了在另一个 select 语句中获取它的值:
ALTER FUNCTION [Prg].[intCheckDelayedProcessProgram]
(
@SalesOrderProductID INT,
@MainProductTreeID INT,
@ProductTreeID INT,
@ProcessId INT,
@additionalDays INT = 2,
@currentDateReverceString VARCHAR(10) = NULL
)
RETURNS INT
AS
BEGIN
--declare @SalesOrderProductID INT = 40957,
-- @MainProductTreeID INT = 93758,
-- @ProductTreeID INT = 93758,
-- @ProcessId INT = 4472,
-- @additionalDays INT = 2, …Run Code Online (Sandbox Code Playgroud) 我使用 64 位操作系统和两个 CPU(每个 CPU 有 7 个逻辑处理器),逻辑处理器总数等于 14。
当我运行此代码时,我得到2048
SELECT max_workers_count FROM sys.dm_os_sys_info
Run Code Online (Sandbox Code Playgroud)
另一方面,当我使用下面的公式时,我得到了完全不同的数字,即672
For a 64-bit operating system:
Total available logical CPUs <= 4
Max Worker Threads = 512
Total available logical CPUs > 4
Max Worker Threads = 512 + ((logical CPUs - 4)*16)
Run Code Online (Sandbox Code Playgroud)
你能向我解释为什么我得到不同的数字吗?我在另一台服务器上对其进行了测试,两种情况的数字都完全相同。
编辑
PS 感谢 Dan Guzman 建议检查最大工作线程的服务器设置。这就是 EXEC sp_configure 'max worker threads' 返回的内容:
我们有一个关于 SQL Server 代理作业的过程,这个作业开始在事务上挂起好几个小时,等待统计数据为 CXCONSUMER 并且永远不会完成。问题是在我们注意到它挂起之后,我们终止了工作并在此期间手动启动,并且工作运行良好并完成。但是现在无论是手动启动还是 sql 代理作业似乎都没有完成并等待 CXCONSUMER。
根据 sp_who2、sp_whoisactive 和 sql server profiler,没有它正在等待的活动锁。它不断产生 CXCONSUMER 和它的处理器时间,基本上什么都不做。这是3h后的执行计划——
另一个症状是当此作业运行时,无法通过属性访问 tempdb 我收到此错误“属性 SpaceAvailable 不适用于数据库‘[tempdb]’。此对象可能不存在此属性,或者可能由于不足而无法检索访问权限”,尽管 tempdb 上有可用空间。
我会感谢你在这件事上的帮助。
是否有一种既定的方法或工具可用于仅通过测试它发送到数据库的查询来对应用程序执行渗透测试?
例如,如果我有一堆 SQL Server 托管各种网站,并且通过一个未参数化的查询,有没有办法检测到这些?
可能不安全的示例查询:
SELECT x,y,z FROM logins WHERE username = 'xx' and password = 'yyy'
Run Code Online (Sandbox Code Playgroud)
...相反,我希望一个安全的应用程序可能正在使用sp_executesql.
在以日期和时间存储值的列上使用 VARCHAR 数据类型2020-01-01 11:04:37而不是DATETIME在 SQL 数据库表中使用数据类型的原因是什么?
我们的系统通过大量测试生成 SQL。我怀疑在某些情况下,找到理想的执行计划需要很长时间。所以 SQL 只选择它迄今为止找到的最好的计划,然后需要很长时间才能运行。是否可以增加 SQL 搜索最佳计划的时间?
使用 SQL Server 2016,我有一个 3rd 方应用程序,它使用我的 SQL Server 上的大型数据库进行数据存储、处理等。
我有一个 BI 团队需要访问这些数据来运行报告和批处理任务,其中一些包括使服务器瘫痪的繁重查询,因此他们无法在实时数据库上执行此操作。为此,我有一个现有的日志传送解决方案,该解决方案维护此数据库的复制供他们使用,但是依赖于该复制数据的数据量和用户数量已经增长到使数据库脱机的程度一天中多次执行日志传送更新已不再可接受。
因此,我想使用 AlwaysOn 可用性组复制而不是日志传送,以便数据在工作时间内保持在线状态并自动更新。
但是,我的问题是我正在复制其数据库的应用程序有点陈旧过时,而且设计它的人显然不知道或不太关心数据库优化,因为很多较大的表没有一个主键。
我已经为一些表添加了索引,这工作正常,但是如果我完全修改表的结构(例如添加主键),应用程序拒绝将它们识别为有效并停止工作。因此,在我说服供应商添加它们之前,这些表将不得不保留没有主键,这可能需要数年时间。
与此同时,有什么我可以做的吗?我试过使用事务复制,它复制了所有带有主键的表就好了,但是没有键的表根本不存在于复制的数据库中。
我听说合并复制可以在没有主键的表上完成,并且可以对可用性组使用合并复制。真的吗?如果是,您能指出我创建此类复制的正确方向吗?
我已经使用 SQL Server 2019 在我的计算机上创建了数据库,现在我想将它移到另一台安装了 SQL Server 2014 的计算机上。
我必须下载 SQL Server 2014 并降级数据库还是有其他解决方案?我该怎么办?
我有一个 SQL 查询,我需要每秒运行大约 12 个小时。这是一个非常简单的查询,它将一些数据记录到一个孤立的表中。现在我一直让它在我的本地 SSMS 客户端中WHILE循环运行,并且我WAITFOR DELAY '00:00:01'习惯于在每次迭代之间暂停 1 秒。
如果我想将其移动到代理作业中,最好安排作业在这 12 小时内每 1 秒运行一次,还是保持查询原样并在早上启动一次作业,以便查询管理如何通常它会运行。(要记住的一件事是,查询通常足够快,以至于它的运行时间是亚秒级,但很少需要几秒钟才能完成执行。)
我想根本问题是,有一个连续运行 12 小时的工作,还是一个运行大约 43,000 次(每秒一次,持续 12 小时)的工作更好?
sql-server ×10
backup ×1
cpu ×1
datatypes ×1
downgrade ×1
functions ×1
jobs ×1
multi-thread ×1
security ×1
timeout ×1
wait-types ×1
xp-cmdshell ×1