我已经创建了一个C#应用程序。我已经为这个应用程序使用了sql server数据库。当我运行应用程序时,它与sql服务器通信并检索数据。
我的问题是,当数据库的大小非常大,并且我请求从它获得大数据(35-40MB)时,获得数据需要花费大量的时间(10-20分钟)。
有没有办法从服务器获取压缩数据并减少网络延迟?
发布于 2017-06-22 23:42:38
也许问题不在Server上,而是在您的应用程序上,但我对此不太了解。
结果集是多行数据,还是许多大列,还是两者兼而有之?
如果有许多行--也许您的应用程序在下载数据之后,不能很好地管理数据。或者,它一次请求并下载一行。
如果大列-也许你可以选择更经济的数据类型。也许你不需要的时候用了nchar。(如果你需要它,那就用它。)您的文本可能会填充不必要的空间,要么是因为您使用char而不是varchar,要么是因为数据来自包含文本末尾的空格的源,varchar将保留该空间,直到从数据中删除为止,即RTRIM(column_name) -我认为这会自动变成varchar(长度)或nvarchar(长度),但请检查这一点。
发布于 2017-06-26 00:21:35
您应该对服务器上正在发生的等待进行快照,特别是注意async_network_io等待,一旦您这样做,再次重新运行请求,检查是否在这里等待,这表明您的应用程序本身存在问题,并且它不能那么快地处理数据。
如果您使用的是实体框架,请确保首先使用.Load()函数加载数据,该函数将数据加载到应用程序端的内存中,然后可以与表格.Local.一些行动一起使用。
希望能帮上忙!
发布于 2022-06-21 16:42:03
您没有提到列类型是什么,如果要从SQL或行集返回Stream,则没有提及。但是,如果使用的是Server 2016或更高版本,则可以使用COMPRESS(xxx)
函数。该函数使用GZIP算法压缩输入表达式(可以在C#中使用C#中的GZipStream
轻松解压缩)。COMPRESS
函数返回varbinary(max)
类型的字节数组。
https://dba.stackexchange.com/questions/176847
复制相似问题