SqlServer 统计 MVC 每个 Action 的 相应时间

1.创建MonitorAction表 

CREATE TABLE [dbo].[MonitorAction](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[HttpMethod] [varchar](10) NOT NULL,
	[AreaName] [varchar](50) NULL,
	[ControllerName] [varchar](70) NOT NULL,
	[ActionName] [varchar](70) NOT NULL,
	[ActionDescription] [nvarchar](50) NULL,
	[IsDeleted] [bit] NOT NULL,
	[CreatedUserId] [varchar](50) NOT NULL,
	[CreatedTime] [datetime2](7) NOT NULL,
	[LastUpdatedTime] [datetime2](7) NOT NULL,
	[LastUpdatedUserId] [varchar](50) NOT NULL,
	[MaxExecutedMillisecond] [bigint] NULL,
	[MinExecutedMillisecond] [bigint] NULL,
	[AvgExecutedMillisecond] [bigint] NULL,
	[ExecutedTime] [bigint] NULL,
	[Remark] [nvarchar](100) NULL,
 CONSTRAINT [PK_MonitorAction] 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]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[MonitorAction] ADD  CONSTRAINT [DF_MonitorAction_IsDeleted]  DEFAULT ((0)) FOR [IsDeleted]
GO

ALTER TABLE [dbo].[MonitorAction] ADD  CONSTRAINT [DF_MonitorAction_CreatedUserId]  DEFAULT ('System') FOR [CreatedUserId]
GO

ALTER TABLE [dbo].[MonitorAction] ADD  CONSTRAINT [DF_MonitorAction_CreatedTime]  DEFAULT (getdate()) FOR [CreatedTime]
GO

ALTER TABLE [dbo].[MonitorAction] ADD  CONSTRAINT [DF_MonitorAction_LastUpdatedTime]  DEFAULT (getdate()) FOR [LastUpdatedTime]
GO

ALTER TABLE [dbo].[MonitorAction] ADD  CONSTRAINT [DF_MonitorAction_LastUpdatedUserId]  DEFAULT ('System') FOR [LastUpdatedUserId]
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'标识列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'Id'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'客户端使用的HTTP传输方法' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'HttpMethod'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Area名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'AreaName'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Controller名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'ControllerName'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Action名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'ActionName'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Action说明' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'ActionDescription'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'逻辑删除' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'IsDeleted'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人(标识)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'CreatedUserId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间(这条业务数据产生的时间)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'CreatedTime'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'LastUpdatedTime'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人(标识)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'LastUpdatedUserId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最大执行时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'MaxExecutedMillisecond'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最小执行时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'MinExecutedMillisecond'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'平均执行时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'AvgExecutedMillisecond'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'执行总次数' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'ExecutedTime'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction', @level2type=N'COLUMN',@level2name=N'Remark'
GO

EXEC sys.sp_addextendedproperty @name=N'Description', @value=N'监控Action的响应时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'MonitorAction'
GO




2.执行Sql语句 建议 用SqlServer 定时计划进行执行


INSERT INTO MonitorAction 
(
	HttpMethod,AreaName,ControllerName,ActionName,ActionDescription
	,MaxExecutedMillisecond,MinExecutedMillisecond,AvgExecutedMillisecond,ExecutedTime
	,Remark
)

SELECT HttpMethod,AreaName,ControllerName,ActionName,max(ActionDescription) ActionDescription
,max(ExecutingTimeSpan) MaxExecutedMillisecond, min(ExecutingTimeSpan) MinExecutedMillisecond
,AVG(ExecutingTimeSpan) AvgExecutedMillisecond,count(*) ExecutedTime,'数据来源:SqlServer定时计划'
FROM LogActionRenderTime 
GROUP BY  HttpMethod,AreaName,ControllerName,ActionName 
order by ControllerName,ActionName

-- select * from MonitorAction
-- truncate table MonitorAction





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,您需要在ASP.NET Core MVC项目中安装Entity Framework Core,可以使用NuGet包管理器进行安装。接下来,您需要添加一个DbContext类来表示数据库的上下文。在这个上下文类中,您需要定义每个实体类与数据库表之间的映射关系。 以下是一个简单的DbContext类示例: ```csharp using Microsoft.EntityFrameworkCore; namespace MyProject.Models { public class MyDbContext : DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } public DbSet<Customer> Customers { get; set; } public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Configure entity mappings here } } } ``` 在上面的示例中,我们定义了一个名为“MyDbContext”的DbContext类,并添加了两个DbSet属性,分别表示“Customers”和“Orders”实体类与数据库表之间的映射关系。 接下来,您可以使用以下示例代码向数据库中插入数据: ```csharp using Microsoft.EntityFrameworkCore; using MyProject.Models; namespace MyProject.Controllers { public class CustomerController : Controller { private readonly MyDbContext _dbContext; public CustomerController(MyDbContext dbContext) { _dbContext = dbContext; } public IActionResult Index() { var customers = _dbContext.Customers.ToList(); return View(customers); } public IActionResult Create() { return View(); } [HttpPost] public IActionResult Create(Customer customer) { if (ModelState.IsValid) { _dbContext.Customers.Add(customer); _dbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } return View(customer); } public IActionResult Edit(int id) { var customer = _dbContext.Customers.Find(id); if (customer == null) { return NotFound(); } return View(customer); } [HttpPost] public IActionResult Edit(Customer customer) { if (ModelState.IsValid) { _dbContext.Entry(customer).State = EntityState.Modified; _dbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } return View(customer); } public IActionResult Delete(int id) { var customer = _dbContext.Customers.Find(id); if (customer == null) { return NotFound(); } return View(customer); } [HttpPost, ActionName("Delete")] public IActionResult DeleteConfirmed(int id) { var customer = _dbContext.Customers.Find(id); if (customer != null) { _dbContext.Customers.Remove(customer); _dbContext.SaveChanges(); } return RedirectToAction(nameof(Index)); } } } ``` 在上面的示例代码中,我们首先在“CustomerController”类的构造函数中注入了“MyDbContext”对象。然后,我们使用“_dbContext.Customers”来访问“Customers”表中的数据,并使用“Add”方法将新数据插入到表中。我们还使用“Find”方法查找特定ID的数据,并使用“Remove”方法从表中删除数据。最后,我们使用“SaveChanges”方法将更改保存到数据库中。 以上是一个简单的示例,您可以根据自己的需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安得权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值