- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Amazon RDS 上使用 Microsoft SQL Web 服务器。系统当前在更新一列时产生超时,我正在尝试解决该问题或至少将其最小化。目前,更新发生在设备呼入时,并且他们呼入很多,以至于设备可能在网络服务器完成最后一次调用之前回调。
Microsoft SQL Server 网站(64 位)版本 13.0.4422.0
我在这里看到了一些潜在的可能性。首先是设备在系统完成处理最后一次调用之前回调,因此同一条记录被同时更新多次。第二种可能性是我遇到了行锁或表锁。
该表总共有大约 3,000 条记录。
请注意,我一次只尝试更新一行中的一列。其他列永远不会更新。
我不需要让上次更新时间非常准确,将代码更改为仅在大于几分钟的情况下更新列是否有任何好处,或者只会增加服务器的负载?关于如何优化这个的任何建议?也许将其移至函数、存储过程或其他内容?
建议的新代码:
UPDATE [Devices] SET [LastUpdated] = GETUTCDATE()
WHERE [Id] = @id AND
([LastUpdated] IS NULL OR DATEDIFF(MI, [LastUpdated], GETUTCDATE()) > 2);
现有更新代码:
internal static async Task UpdateDeviceTime(ApplicationDbContext db, int deviceId, DateTime dateTime)
{
var parm1 = new System.Data.SqlClient.SqlParameter("@id", deviceId);
var parm2 = new System.Data.SqlClient.SqlParameter("@date", dateTime);
var sql = "UPDATE [Devices] SET [LastUpdated] = @date WHERE [Id] = @Id";
// timeout occurs here.
var cnt = await db.Database.ExecuteSqlCommandAsync(sql, new object[] { parm1, parm2 });
}
建表脚本:
CREATE TABLE [dbo].[Devices](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CompanyId] [int] NOT NULL,
[Button_MAC_Address] [nvarchar](17) NOT NULL,
[Password] [nvarchar](max) NOT NULL,
[TimeOffset] [int] NOT NULL,
[CreationTime] [datetime] NULL,
[LastUpdated] [datetime] NULL,
CONSTRAINT [PK_Devices] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Devices] ADD CONSTRAINT [DF_Devices_CompanyId] DEFAULT ((1)) FOR [CompanyId]
GO
ALTER TABLE [dbo].[Devices] ADD CONSTRAINT [DF_Devices_TimeOffset] DEFAULT ((-5)) FOR [TimeOffset]
GO
ALTER TABLE [dbo].[Devices] ADD CONSTRAINT [DF_Devices_CreationTime] DEFAULT (getdate()) FOR [CreationTime]
GO
ALTER TABLE [dbo].[Devices] ADD CONSTRAINT [PK_Devices] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
最佳答案
您应该使用分析器等工具或其他检测阻塞的技术来调查原因。我不明白为什么您在更新表中只有 3,000 条记录的一列时会遇到问题。这可能与您的约束有关。
如果真的是时序问题,那么可以考虑内存中的OLTP,专为处理此类场景而设计。
上次更新也可以存储在基于事务的表中,并使用 Max(UpdatedTime) 连接返回该表。在这种情况下,您永远不会更新,而只是添加新记录。
然后您可以使用分区或清理例程来减小此事务表的大小。
Programming patterns that In-Memory OLTP will improve include concurrency scenarios, point lookups, workloads where there are many inserts and updates, and business logic in stored procedures.
关于c# - 快速更新 MSSQL 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47911201/
我在我的 Linux(Ubuntu 16.04)服务器上安装 MSSQL 时遇到问题。 我使用了微软的手册,但我总是在同一阶段失败。 实际上,由于内核问题,Docker 不是替代品。 后: sudo
我正在尝试导入 mssql 我有一个 js 文件,它自己可以正常工作,但我需要这样做,以便我可以从 react js 环境中调用该函数,而不仅仅是节点 import React, { Componen
我对 python 比较陌生,对 django 也很陌生。 我正在尝试使用 django 连接到 MSSQL 服务器。我安装了django-mssql(也许它需要放在项目目录中的某个地方?)。 但是,
我想为我的项目使用 mssql 数据库。我采用了 node-mssql 模块 ( https://www.npmjs.com/package/mssql ) 并使用 Microsoft SQL Ser
我试图恢复 centos 服务器内的 mssql 文件。 .bak 文件已放入服务器并将用户设为 mssql。 [![在此处输入图像描述][1]][1] 这是我运行此命令进行恢复时的错误。 sqlcm
我正在尝试建立从 MSSQL (express 2008) 到 Mysql 的特定查询记录集的单向同步。这是该查询。 SELECT [datafk] ,[datahistorypk] ,[da
我正在尝试在 node.js 中编写脚本来查询 MSSQL 数据库。我是 javascript 的新手,node.js 的新手,VSCode 的新手,但我知道一些关于 SQL 的事情。我有工作代码,但
我正在尝试将我的 Golang 应用程序连接到 MSSQL 2014。 我已经成功使用 - https://github.com/denisenkom/go-mssqldb为此,我只在我的 MSSQL
在一个应用程序中,我有一个全局作用域 var db *sql.DB 稍后调用 slcstrSource, slcint64Timestamp, slcstrContent, err := DB_fun
我从服务器 A 创建了一个具有以下规范的 .bak 文件(备份):Windows Server 2003、MSSQL 2005。现在我想在具有以下规范的新服务器 B 上恢复此备份:Windows 8、
我的任务是将 Microsoft SQL Server 2005 数据库迁移到 MySQL 5.6(这些都是本地运行的数据库服务器),非常感谢您的帮助。 -MSSQL 源数据库有 latin1 排序规
我在这里不知所措。总的来说,我对 python 和 odbc 很陌生。但是,我需要找到一种方法,在 Web GUI 的后端有一个 python 脚本,作为我公司的内部工具,从以下位置与 MSSQL 服
下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SEL
1.--区分大小写 select * from a where a='AbCdE' collate Ch
-->分段更新 -->Author:wufeng4552 -->Date :2009-10-07 08:13:41 --如:更新'a,a,a,a,a' 第三段a 為 'test'
这几天突然有个想法:希望能够自动监控、收集数据库服务器的磁盘容量信息,当达到一个阀值后,自动发送告警邮件给DBA,将数据库磁盘详细信息告知DBA,提醒DBA做好存储规划计划,初步的想法是通过作业调用
看到网上好多人问为什么我的SQL 2008只能用服务器计算器名登录,而不能用IP登录呢?我也遇到过这个问题,看到网上的回答各有千秋,但没有一个写得比较便于操作的。经过一番网络关键字(SQL 2008
最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing。现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看
MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database mf2011 --创
地图数据存放在sqlserver 2008中,使用mapxtreme7 开发时,使用Feature.Update()方法时出错的提示包含“MSSQL 将截断字符串或二进制数据” 主要原因就是给某个
我是一名优秀的程序员,十分优秀!