标签: sql-server

SQL Server CPU 使用率有时超载

我们确实有几台服务器,一台专用于没有 SQL 的网站,另一台服务器专用于 SQL。

现在运行 SQL 的服务器非常强大,但有时服务器 CPU 只是达到 100%。

这是几个屏幕截图,显示了正在发生的事情。

CPU 已满:

在此处输入图片说明

CPU运行正常:

在此处输入图片说明

如您所见,服务器非常强大。

补充说明。

  1. 我们正在运行 nopcommerce 版本 3.70
  2. 该网站已由其他开发人员进行了大量定制。
  3. 该网站有大约 4000 - 5000 种产品。
  4. 当 CPU 达到最大值时,加载时间令人震惊。> 30 秒,有时超过 1 分钟。

有没有人能够对可能发生的事情有所了解,或者指导我完成一些检查。

干杯

更新:以下两个屏幕截图是@S4V1N 建议我运行的两个查询的结果。

在此处输入图片说明

在此处输入图片说明

performance sql-server windows-server performance-testing

2
推荐指数
1
解决办法
8884
查看次数

SQL Server 的自定义序列

使用 SQL Server 生成自定义自动生成序列的最佳方法是什么?

这是我的要求:

  • 我的应用程序托管在 10 台未互连的独立服务器上。

  • 每个实例都应该生成一个序列号,所有这些数据将使用 SQL Server 的合并复制合并到所有数据库中。

  • 生成的序列在所有服务器中应该是唯一的。

为了实现这一点,我创建了一个函数来为序列号添加服务器 id 前缀,并将其用作计算列。但是当我添加数据时,出现以下异常:

“已超出最大存储过程、函数、触发器或视图嵌套级别(限制为 32)。”

这是我的表和函数。请提出更好的方法。

create table Customers
(
    CID int identity not null primary key,
    CustomerName varchar(50)
)

ALTER function [dbo].[NextCustomerNumber]()
returns bigint
as
begin
    declare @lastval bigint
    declare @serverId int
    declare @newval bigint
    set @lastval = (select max(CustomerNumber) from Customers)
    set @serverId= 1 -- Server ID pulls from some settings
    set @newval=CONVERT(bigint, (CAST(@serverId as varchar(2))+CONVERT( varchar(10),(RIGHT(@lastval,(LEN(@lastval)-LEN(@serverId)))+1))))
    return @newval

end

Alter table Customers add CustomerNumber …
Run Code Online (Sandbox Code Playgroud)

replication sql-server auto-increment sequence identity

2
推荐指数
1
解决办法
1941
查看次数

一旦表变大,我可以做些什么来提高未来的性能?

我创建了一个导入 600,000 行 Excel 工作表的表格。我将运行的大多数查询都将使用C_CustomerID,它们将如下例所示:

select * from testtable where C_CustomerID = 12345678
Run Code Online (Sandbox Code Playgroud)

表定义为:

CREATE TABLE [dbo].[testtable](
    [id_card] [int] IDENTITY(1,1) NOT NULL,
    [C_CustomerID] [int] NOT NULL,
    [C_AccountID] [nvarchar](255) NULL,
    [C_ProductID] [varchar](20) NULL,
    .......... more columns here ...     
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我创建了一个索引:

CREATE NONCLUSTERED INDEX [inx_profitability] ON [dbo].[testtable]
(
    [C_CustomerID] ASC
)
Run Code Online (Sandbox Code Playgroud)

稍后我只会从 Excel 工作表导入更多记录。每 6 个月将导出约 500,000 条新记录。

一旦表变大,我可以做些什么来提高未来的性能?

我正在运行 SQL Server 2012 和 Microsoft SQL Server Management Studio 11.0.3128.0。

database-design sql-server index-tuning sql-server-2012

2
推荐指数
1
解决办法
105
查看次数

MDF 备份:“登录失败”错误

我正在使用 Visual Studio 创建一个 VC# 应用程序。启动时,它会打开一个 MDF 文件(SQL Server Express 数据库)。

当我执行

BACKUP DATABASE db.mdf TO DISK=backup.mdf
Run Code Online (Sandbox Code Playgroud)

我创建了 backup.mdf。

然后我执行以下操作:

  1. 关闭应用程序
  2. 删除 db.mdf
  3. 将 backup.mdf 重命名为 db.mdf
  4. 运行应用程序

我收到错误“用户‘PC\User’登录失败”

我该如何解决这个问题?

sql-server backup sql-server-express

2
推荐指数
1
解决办法
274
查看次数

如何使用 securityadmin 服务器角色模拟登录名

在 MSSQL 2008R2 上,我在不同的服务器上有两个实例,我需要同步所有登录的密码更改。我认为我可以创建一个存储过程,其中具有 securityadmin 服务器角色的用户(模拟)更改密码。

Obs:CHANGE_PASSWORD 是具有 securityadmin 服务器角色的用户。

ALTER PROCEDURE SPU_CAMBIO_PASSWORD
(
    @USER VARCHAR(50),
    @PASSWORD VARCHAR(100)
)
WITH EXECUTE AS 'CHANGE_PASSWORD'
AS
    DECLARE @STATEMENT VARCHAR(200)
    SET @STATEMENT= 'ALTER LOGIN '+ @USER+ ' WITH PASSWORD = '''+@PASSWORD+''', CHECK_POLICY =OFF'
    EXEC(@STATEMENT)
GO
Run Code Online (Sandbox Code Playgroud)

错误:无法作为服务器主体执行,因为主体“CAMBIO_PASSWORD”不存在,无法模拟此类主体,或者您没有权限。

sql-server permissions t-sql sql-server-2008-r2 impersonation

2
推荐指数
1
解决办法
561
查看次数

截断具有相关外键约束的表

嗨,我试图从我的数据库中截断一些表,但它们与外键约束相关,所以每次我尝试 SQL Server 时都会抛出这样的错误:

无法截断表“Table”,因为它正被 FOREIGN KEY 约束引用

我不想删除表或删除它们。

一位朋友告诉了这个案例的Truncate Cascade,但我没有找到任何相关信息,其他用户也告诉我试试这个;我确实尝试过,但仍然没有截断我的表。

我还阅读了有关外键 DROP 和 RE-CREATE 的 SCRIPT 以与 TRUNCATE 一起使用。

脚本应该会影响我的数据库,或者至少我是这么认为的。但是在运行它之后,我无法截断我的表并且它抛出了同样的错误。我正在使用 SQL Server 2008 R2,并使用该版本的 SSMS 运行我的查询。

sql-server sql-server-2008-r2 truncate

2
推荐指数
1
解决办法
6万
查看次数

如何从链接服务器和本地服务器获取多个表的数量

如何从链接服务器获取多个表的记录计数。

我有两台名为生产和本地的服务器。我需要编写查询来获得这张图片中提到的结果。

在此处输入图片说明

我试过

SELECT 'TableA' AS Tables, COUNT(*) AS 'QA' FROM [Database].[schema].[tablename]
UNION
SELECT 'TableB' AS Tables, COUNT(*) AS 'QA' FROM [Database].[schema].[tablename]
Run Code Online (Sandbox Code Playgroud)

如何显示链接服务器的记录数?

sql-server

2
推荐指数
1
解决办法
186
查看次数

仅还原验证选项与手动还原

我的问题与 SQL Server 的最佳实践有关。我需要整理一份文件,列出我们的各种数据库,并且我们对这些数据库的备份是有效的并且已经过测试,我们知道它们会在灾难恢复情况下正确恢复。我正在使用 Ola H. 维护解决方案,该解决方案使用 RESTORE VERIFY 选项备份数据库,并提供“成功”消息以指示备份集有效。这是否足以让我们充满信心,还是我们仍然应该手动将这些备份恢复到测试服务器并运行测试?

sql-server

2
推荐指数
1
解决办法
471
查看次数

如何检查我的用户是否具有 CREATE SCHEMA 权限?

我在可以创建表和存储过程的数据库中有一个用户帐户。

我想确认此用户帐户是否可以创建模式 -无需先尝试。(我是金融的一部分,而不是 IT。)

如果我可以创建模式,那么我会请求 IT 许可继续这样做。

如果我不能,那么我将继续等待 IT 在我前段时间提出的服务台请求上执行此操作(叹气)。

有没有我可以在 SSMS 中运行的命令,它可以在不实际创建新模式的情况下告诉我这一点?

我还截取了该用户权限的几个屏幕截图 - 也许他们会有答案?

数据库权限 1

数据库权限 2

编辑:

运行下面 SQLServing 建议的 SQL 后,我得到了这个结果:

UserName    is_disabled principal_type_desc class_desc  object_name permission_name permission_state_desc
DWReports   0   SQL_USER    DATABASE    NULL    CONNECT GRANT
DWReports   0   SQL_USER    OBJECT_OR_COLUMN    GetSystemSQLAgentJobList    EXECUTE GRANT
Run Code Online (Sandbox Code Playgroud)

sql-server ssms sql-server-2012

2
推荐指数
1
解决办法
1万
查看次数

当 1 列符合条件时,选择所有具有相同 ID 的行

我需要有关 SQL 查询的帮助。用一些例子可以更好地解释我的问题。

假设我从两个表 ORDR 和 RDRO 中提取了这样的数据。第一个表 (ORDR) 包含有关订单的所有数据,但项目除外。第二个表 (RDRO) 包含订单的所有项目信息。可以使用 [docNum] 连接两个表。

T0.docNum | T1.itemCode
123         EDS100
123         DDS200
123         DDS500

124         LLS220
124         LDS254

125         FGD450
125         LDS552
125         DDS200 
125         EDD200
Run Code Online (Sandbox Code Playgroud)

当 1 个项目编号符合条件时,我想返回所有行。

假设在这种情况下,当一行等于 DDS200 时,我想要订单的所有行会给出以下结果:

T0.docNum | T1.itemCode
123         EDS100
123         DDS200    -- match
123         DDS500

125         FGD450
125         LDS552
125         DDS200    -- match
125         EDD200
Run Code Online (Sandbox Code Playgroud)

我确定这是微不足道的,我尝试了以下方法:

SELECT T0.docNum, T1.itemCode 
FROM ordr T0  INNER JOIN rdro T1 ON T0.docNum = T1.docNum 
WHERE  T1.itemCode like …
Run Code Online (Sandbox Code Playgroud)

sql-server

2
推荐指数
1
解决办法
2万
查看次数