AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[entity-framework](dba)

Martin Hope
Phoniex
Asked: 2021-04-03 02:03:00 +0800 CST

SQL Server - 自动完整备份使用 EntityFramework-Migrations 自动创建的新数据库

  • 3

我有一个具有多租户架构的 ASP.NET MVC 应用程序(使用 SQL-Server)。我正在使用 EntityFramework DB-Migrations,它会自动为每个客户生成一个数据库。

在 SQL-Server 中,我设置了 3 个维护计划:完整备份、差异备份和事务备份。完全备份每天只发生一次。

现在,如果自动生成新的客户数据库,则下一个事务/差异备份将失败,因为没有任何可用的完整备份。

我发现以下线程存在类似问题:full-backup-on-database-creation

但在这种情况下,会为所有数据库创建完整备份 - 这可能会导致运行时间更长。我只想为新数据库做一个完整的备份(它是空的,应该在几秒钟内完成)。

我已经通过从维护计划中提取代码来尝试这个:

ON ALL SERVER 
FOR CREATE_DATABASE
AS 

SET NOCOUNT ON;
    DECLARE @EventData XML = EVENTDATA();
    DECLARE @db sysname = @EventData.value(N'(/EVENT_INSTANCE/DatabaseName)[1]', N'sysname');
    DECLARE @SubDir nvarchar(1024) =  N'PATH TO BACKUP-LOCATION' + @db;
    DECLARE @BackupName nvarchar(1024) = @db + N'_backup_initial';
    DECLARE @BakFile nvarchar(1024) = @SubDir + N'\' + @BackupName + N'.bak';
    DECLARE @ErrMessage nvarchar(1024) = N'Verify failed. Backup information for database ' + @db + ' not found';
    declare @backupSetId as int

    EXECUTE master.dbo.xp_create_subdir @SubDir
    
    exec('BACKUP DATABASE ' + @db + ' TO  DISK = ''' + @BakFile + ''' WITH NOFORMAT, NOINIT,  NAME = ''' + @BackupName + ''', SKIP, REWIND, NOUNLOAD, COMPRESSION, ENCRYPTION(ALGORITHM = AES_256, SERVER CERTIFICATE = [BackupCert]),  STATS = 10, CHECKSUM, CONTINUE_AFTER_ERROR')
        
    select @backupSetId = position from msdb..backupset where database_name=@db and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@db )
    if @backupSetId is null begin raiserror(@ErrMessage, 16, 1) end
    --RESTORE VERIFYONLY FROM  DISK = @BakFile WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
    
GO

手动执行备份脚本正在工作,但在触发器中失败并显示错误消息:

无法在事务中执行备份或恢复操作

有谁知道如何让这个工作?

sql-server entity-framework
  • 2 个回答
  • 505 Views
Martin Hope
Kirsten
Asked: 2020-04-18 16:56:13 +0800 CST

spid 挂起 ASYNC_NETWORK_IO 疑难解答

  • 2

最近我们将数据库移到了新服务器

旧服务器正在运行

Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64) Jul 12 2019 17:43:08
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS)

新服务器正在运行

Microsoft SQL Server 2019 (RTM-CU2) (KB4536075) - 15.0.4013.40 (X64) Feb 3 2020 16:40:57
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Linux (CentOS Linux 8 (Core))

我们有一个使用数据库的 C# Windows 服务。它间歇性地停止或运行非常缓慢。

Windows 服务使用 .Net Framework 4.7.2,它调用一个用 .net 标准 2.0 编写的库,该库也进行 sql 调用。

我发现了这个关于为什么 SPID 的状态被暂停的问题,并看到我们的暂停 Spid 有 wait_type ASYNC_NETWORK_IO

根据文档,这

当任务被网络阻塞时发生在网络写入上。验证客户端是否正在处理来自服务器的数据。

重新启动 Windows 服务确实可以暂时解决问题。但是,这并不能帮助我解决问题的原因。

我主要使用的是 EntityFramework 6.4

[更新]

我已经开始跑步

dbcc inputbuffer(sessionId) 

查看最后运行的 SQL

sql-server entity-framework
  • 1 个回答
  • 489 Views
Martin Hope
Sabyasachi Mukherjee
Asked: 2017-03-09 14:49:11 +0800 CST

实体框架与数据库耦合

  • 2

我是 EF 和数据库设计的新手。我一直在研究如何使用 Repository Pattern 和 Unit of Work,并且看到了很多使用 LINQ 进行的查询。

但我有一个问题。如果将来我们更改数据库的架构,则存储库层必然会发生变化,因为实体本身也会发生变化。换句话说,存储库层与数据库结构紧密耦合。

但是,如果我们使用数据库本身的存储过程封装大部分可能的事务,然后使用 EF 导入它们,那么数据库设计中的更改不会对存储库层产生太大影响。换句话说,层将是这样的:

DATABASE TABLES <--->  STORED PROCEDURES <---> EF <---> REPOSITORY <---> APPLICATION LOGIC

为什么我们不遵循这种模式,或者我忽略了任何陷阱?这不是将应用程序与数据库松散地耦合在一起吗?

我认为使用 LINQ 还会将架构与应用程序绑定,这是我关心的问题。如果将来我想进一步规范我的数据库,那就意味着重写整个 LINQ 查询。这是我更喜欢视图而不是显示原始表格的另一个原因。这就像在类中使用属​​性而不是字段。它增加了一层封装。

database-design entity-framework
  • 1 个回答
  • 156 Views
Martin Hope
drex drex
Asked: 2015-04-21 05:01:37 +0800 CST

SQL Server 避免过程参数嗅探

  • -1

我从这个过程中得到缓慢的表现

CREATE PROCEDURE MyProcedure01
  @date datetime2(7)
  AS
BEGIN
SELECT 
[Limit1].[C2] AS [C1], 
[Limit1].[mc_object] AS [mc_object], 
[Limit1].[C1] AS [C2]
FROM ( SELECT TOP (50) 
    [GroupBy1].[A1] AS [C1], 
    [GroupBy1].[K1] AS [mc_object], 
    1 AS [C2]
    FROM ( SELECT 
        [Extent1].[mc_object] AS [K1], 
        COUNT(1) AS [A1]
        FROM [dbo].[BEM_EVT_FULL] AS [Extent1]
        WHERE [Extent1].[date_reception] > @date
        GROUP BY [Extent1].[mc_object]
    )  AS [GroupBy1]
)  AS [Limit1]
END

在做了一些搜索之后,我发现如果以这种方式声明变量,我们将解决参数嗅探问题。

CREATE PROCEDURE MyProcedure02
  @date datetime2(7)
  AS
BEGIN
DECLARE @myDate datetime2(7)
 SET @myDate = @date
 SELECT 
[Limit1].[C2] AS [C1], 
[Limit1].[mc_object] AS [mc_object], 
[Limit1].[C1] AS [C2]
FROM ( SELECT TOP (50) 
    [GroupBy1].[A1] AS [C1], 
    [GroupBy1].[K1] AS [mc_object], 
    1 AS [C2]
    FROM ( SELECT 
        [Extent1].[mc_object] AS [K1], 
        COUNT(1) AS [A1]
        FROM [dbo].[BEM_EVT_FULL] AS [Extent1]
        WHERE [Extent1].[date_reception] > @myDate
        GROUP BY [Extent1].[mc_object]
    )  AS [GroupBy1]
)  AS [Limit1]
END

但不幸的是结果仍然很慢我能知道我是否遗漏了什么吗

sql-server entity-framework
  • 2 个回答
  • 1415 Views
Martin Hope
James Lupolt
Asked: 2014-05-30 12:49:38 +0800 CST

如何解决“会话处于单用户模式时客户端驱动程序已发送多个请求”

  • 8

我正在与一位正在努力阻止以下错误的开发人员合作:

服务器将断开连接,因为客户端驱动程序在会话处于单用户模式时发送了多个请求。当会话中仍有批处理正在运行时,客户端发送重置连接的请求,或者当会话正在重置连接时客户端发送请求时,会发生此错误。请联系客户端驱动程序供应商。

发生此错误时,典型的结果是会话持有锁,但没有运行 SQL(sys.dm_exec_requestssession_id 没有行),并导致阻塞,直到它被杀死。阻塞的原因很简单,但如何阻止错误的发生却不是。

关于这个问题的一些事实:

  • 客户端正在使用实体框架(是的,我知道...),启用了 MARS(是的,我知道...)
  • SQL Server 版本为 10.00.5844 (SQL Server 2008 SP3 CU12)。他们可能不会在没有广泛测试的情况下升级主要版本,但应用更新的 CU 是可行的。
  • 客户端程序显示sys.dm_exec_connections为 .Net SqlClient 数据提供程序
  • 打开的连接似乎肯定启用了 MARS,如shownet_transport所示。sys.dm_exec_connectionsSession
  • 根据Matt Neerincx在此线程中的评论,我被告知应用程序的连接字符串启用了异步处理(我自己无权访问应用程序服务器来确认这一点):

如果在连接字符串上设置 Async=true 应该可以防止这个问题。如果您使用 MARS 并在多个并发线程上使用相同的连接,则可能发生的情况是重置连接的调用可能会稍微延迟并触发此错误。如果您设置 Async=true,我们会在客户端驱动程序中执行额外的锁定以防止这种情况发生。

关于此错误的更多信息很少。它似乎表明客户端的程序sp_reset_connection在批处理仍在运行时正在调用。我可以设置跟踪来确认这一点,但我必须记录很多不相关的活动,而且问题每隔几天才会发生一次。此外,我不确定开发人员是否能够利用这些证据来解决问题。

作为 DBA 或系统管理员,我是否可以使用任何其他技术来进一步解决此问题,或者我可以向开发人员建议任何可能为他提供有用信息或减少问题发生的可能性?

sql-server entity-framework
  • 1 个回答
  • 10001 Views
Martin Hope
Fabricio Araujo
Asked: 2012-10-05 13:21:19 +0800 CST

如何解决干扰其他应用程序的 orm 查询

  • 7

好吧,这是假设的场景,但我想了解的是从事后日志(比如 SQL Server Profiler 跟踪)识别 ORM 情况下的代码的路径。为了让它不会太模糊,考虑这样一个场景:

  • SQL Server 2008
  • 作为 ORM 的实体框架

那么,在这种情况下,DBA(也是 VB.Net 开发人员)从日志诊断哪些代码(在本例中为 Linq 查询)造成问题的常见路径是什么?在这种情况下,该应用程序正常,但会影响使用相同数据库/服务器的其他应用程序响应时间。

那会与 Java+Hiberate 进程截然不同吗?

编辑:我想了解从跟踪到元查询的路径。如果应用程序中有 SQL,这意味着“在文件中查找”会话(在极端情况下可能使用某些正则表达式)可以将检查任务的目标减少到几十个可疑文件,而不是十分之一甚至数百个源文件。使用 ORM,如何使用 ORM(在本例中为 EF)进入该阶段?

sql-server-2008 entity-framework
  • 4 个回答
  • 541 Views
Martin Hope
Nate
Asked: 2011-12-21 09:16:00 +0800 CST

实体框架和/或 Linq-To-SQL 查询是否会在 SSMS 的“服务器仪表板”报告中显示为“临时查询”?

  • 3

它几乎都在标题中。我有一个 SQL Server,它显示 90% 以上的 CPU 使用率和执行的逻辑 IO 是由于“临时查询”引起的,其余的使用率显示在实际数据库名称下。这全部来自“服务器仪表板”报告。

我在这台服务器上有几个数据库,这些数据库由我无法控制的供应商应用程序直接访问。一般来说,它们的使用率非常低;我有两个数据库,它们由用 Entity Framework 和 Linq-To-SQL 编写的内部应用程序访问和使用。我想知道这是否就是为什么我的“即席查询”显示出如此高的使用率而不是我的内部数据库名称的原因。

我问的原因是因为我注意到性能有些下降,我的服务器上的 CPU 在 sqlserver.exe 进程上运行了 95% 的时间很长一段时间,最小的“下降峰值”到 10-15% 的使用。

sql-server entity-framework
  • 1 个回答
  • 1002 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve