SQL Server数据库大小增加



我正在开发一个ASP。. NET Web应用程序,具有实时功能。净SignalR。

我面临的问题是SqlNotificationType

如果我使用SqlNotificationType.Change,我无法从数据库中获得更改通知。SQL 'ServiceBroker'已为我的数据库启用。

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
    if (e.Type == SqlNotificationType.Change)
    {
        NotificationHub nHub = new NotificationHub();
        nHub.SendNotifications();
    }
}

但是如果我使用SqlNotificationType.Subscribe,它只是开始通知我数据库更改,但数据库大小开始随着数据库中的每次更改而增长。

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
    if (e.Type == SqlNotificationType.Subscribe)
    {
        NotificationHub nHub = new NotificationHub();
        nHub.SendNotifications();
    }
}

每当在数据库表中进行更改时,必须在处理每个通知后通过重新执行查询来创建新的订阅。

增加数据库大小

下面给出了向所有连接的客户端发送通知的函数。

public string SendNotifications()
    {
        using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MCNServerconnectionString"].ConnectionString))
        {
            const string query = "Select ID, AgentID, DiallerID, Call_Direction, Extension, Call_ID  from [MCNServer].[dbo].[CallsDataRecords] where ID = 915";
            connection.Open();
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Notification = null;
                DataTable dt = new DataTable();
                SqlDependency dependency = new SqlDependency(command);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                if (connection.State == ConnectionState.Closed)
                    connection.Open();
                var reader = command.ExecuteReader();
                dt.Load(reader);
                if (dt.Rows.Count > 0)
                {
                    json = JsonConvert.SerializeObject(dt, Formatting.Indented);
                }
            }
        }
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
        return context.Clients.All.RecieveNotification(json).ToString();
    }

我发现的解决方案是减少数据库QueryNotificationTimeOut以使通知过期。

如何使缓存条目无效以消除查询通知?

经过大量的搜索和调试我的代码,我找到了问题并解决了。

SqlNotificationType.Change不适合我,当我使用SqlNotificationType.Subscribe时,它对我有效,但它通过订阅查询通知而增加数据库大小,并且由于未经授权访问数据库而未过期。

因此,由于数据库大小增加的问题,而我使用Sql依赖和启用服务代理为我的数据库是未经授权访问数据库与sa用户。

由于这个问题,查询通知不会过期,并且每当数据库中发生更改时,它们都会添加到数据库中。这就是为什么数据库的大小在增长。

所以为了解决这个问题,我修改了我的数据库并将授权设置为sa用户,它对我来说工作得很好。

ALTER AUTHORIZATION ON DATABASE::[MCNServer] TO [sa];

现在数据库中没有查询通知,因为sa用户现在被授权访问该数据库,我使用SqlNotificationType.Change,它现在正在工作

相关内容

  • 没有找到相关文章

最新更新