- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天我使用 AnyDAC (firedac) 进行了测试,以获取远程 SQL Server 2012 中的所有可用数据。
我从中获取数据的表有这些简单的列:
1. date - (size 3 byte)
2. time - (max 5 byte)
3. int - (4 byte)
4. bit - (1 byte)
5. int - (4 byte)
6. float - (4 byte)
7. float - (4 byte)
8. int - (4 byte)
9. int - (4 byte)
总行大小不得超过 33 字节。
好吧,在获取表中可用的所有行(超过 214 万行)后,我检查了 FireDAC 收到的 tcp 流量,发现它约为 280MB,这意味着每行需要大约 130 字节,而我的预期值接近到 33 字节。
我通过使用在服务器端定义的存储过程进行了另一项测量,该存储过程有一个插入 sql 到上面的同一个表,并且我使用 AnyDAC 的数组 DML 功能调用该存储过程。数组大小为 300K,我使用它总共添加了 1880 万条记录。用于它的流量实现为 2.85 GB。 (所以每行 150 字节)
FireDAC或SQL Server端是否有任何配置来减少流量?显然,这里有问题。有什么建议吗?
谢谢。
信息输出:
================================
Connection definition parameters
================================
User_Name=*****
Password=*******
SERVER=sql.***.gen
ApplicationName=Bist
Workstation=NB
DATABASE=BIST
MARS=yes
DriverID=MSSQL
================================
FireDAC info
================================
Tool = D18 Architect
FireDAC = 8.0.1 (Build 3279)
Platform = Windows 32 bit
Defines = AnyDAC_Unicode;AnyDAC_DBX;AnyDAC_NOLOCALE_META;
AnyDAC_MONITOR
================================
Client info
================================
Loading driver MSSQL ...
Loading odbc32.dll driver manager
Creating ODBC environment handle
Searching for ODBC driver ...
Checking for ODBC driver [SQL SERVER NATIVE CLIENT 11.0] ...
Found [SQL Server Native Client 11.0]
Driver Manager version = 03.80.7601.0000
================================
Session info
================================
Current catalog =
Current schema = dbo
Driver name = sqlncli11.dll
Driver version = 11.00.2100
Driver conformance = 3
DBMS name = Microsoft SQL Server
DBMS version = 11.00.2100
最佳答案
您到 SQL 数据库服务器的网络流量不仅仅包括您要传输的数据(正如您所观察到的,收到的流量远多于行数据)
在开始之前,请允许我声明一些事情:我绝不是网络流量和协议(protocol)方面的专家,但我花了相当多的时间研究它们,以充分理解它们。我也不太了解特定 DAC 软件、查询组合等将采用什么协议(protocol)来带回您所请求的数据。话虽如此,我无法给出确切的例子。但这些概念仍然适用。
与 SQL Server 的通信通过各种协议(protocol)进行,但为了便于讨论,我们将只关注其中一种:TDS(表格数据流)协议(protocol)。 (您可以在以下位置阅读有关 SQL Server 协议(protocol)的更多信息: 您可以在以下位置阅读有关 SQL Server 协议(protocol)的更多信息:http://msdn.microsoft.com/en-us/library/ff420673(v=sql.105).aspx)。 TDS 使用 TCP 协议(protocol),因此 TDS 数据包只不过是封装在 TCP 数据包中的规范。
对于 TCP,通信基本上采用请求/响应类型的交换,涉及许多请求/响应/确认数据包。再说一遍,我绝不是这方面的专家,但您可以在http://en.wikipedia.org/wiki/Transmission_Control_Protocol阅读更多内容。
通信的“确认”(或确认)方面本身就造成了相当大的开销,超出了您引用的行大小。您可以在下图中看到一个示例,其中客户端应用程序和 SQL 服务器之间发生通信:
此外,在从数据库服务器发送到应用程序的实际数据包中,TCP 数据包协议(protocol)本身以及 TDS 数据包内存在大量开销。
让我们只关注 TDS 数据包的开销,它会增加您的整体数据传输负载。以下是 TDS 数据包中可找到内容的所有记录 (http://msdn.microsoft.com/en-us/library/dd340794.aspx):
始终,您的实际数据(在上述情况下)实际上位于数据包的 ROW 部分内。
下面的屏幕截图显示了 1 个 TDS 数据包的 ASCII 版本。数据包帧的突出显示部分(右侧)是实际的行数据。其余的只是开销,使整个通信和辅助事物正常工作。
这甚至不包括 TCP 本身产生的开销(尽管是必要的)。
您正在传输大量数据,并且这些数据始终会产生开销。
SELECT TOP 50 之类的方式返回您需要的结果。 .. 哪里....
根据您对数据的实际使用情况,还有许多其他解决方案,但这些只是一些想法。
希望这有帮助!
关于sql-server - SQL Server 2012 消耗太多网络流量来获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382467/
我有一个使用 PHP 和 MariaDB 10.3 的小型大型数据库应用程序。 我有大约 100 个表,大约有 3,000 个 View 。 当超过 1,000 个 View 时,数据库架构就会崩溃并
parsing "\(|.*?)|)" - Too many )'s. 写这个的时候我收到这个错误... private static Regex resourceTextsREGEX = new
我有一个Powershell脚本,它会生成一个包含数据的JSON文件。 我对此文件有问题。它产生两倍的“\”! 你知道我该怎么解决吗? 这是我的生成JSON文件的代码: [ordered]@{ pcn
我不确定为什么会收到此错误,我在不同点使用 str.join() 和 os.path.join()在脚本中,这是原因吗? 使用os.path.join: from os.path import get
一段时间后,在我的应用程序中,似乎出现了一个大问题。有一个来自 Box2D 的 b2Bodys 的构建。我确实在我的应用程序中使用了一些 b2Body 来进行碰撞,但我会说屏幕上一次最多有 10 个。
我正在创建一个包含 6 种不同问题类型的简单数学程序。我想让程序随机显示6种类型中的一种,但有些问题应该出现得比较频繁。我使用加权数组,但从加权数组中选择问题类型后,如果不在 if 语句中使用 10
我想构建一个包含大约 400 个单元的 Controller ,4 列,每列 100 个单元。每个单元格都必须被绘制并响应鼠标事件。这个会不会太重了?我应该为每个单元使用另一种方法,如 CALayer
我是 Haskell 的新手,在编写小程序时,我通常会使用太多的 where 子句来检查函数中的许多内容,因此编写 where 子句是一种很好的做法,或者还有其他好的替代方法吗? 例如,在下面的代码中
我有一个 index.js,其中包含一些导出,每个导出仅包含一个函数。我尝试一次部署其中的几个,CLI 给我以下错误; Error: Too many arguments. Run firebase
我在正则表达式上挣扎了几个小时,似乎没有找到最后一点解决方案。我基本上是逐行解析 C 头文件以查找变量。 以下是我可能遇到的需要传递正则表达式的行的情况: //#define variable_nam
我有一个 html 表单,大约有 1500 个输入字段*(文本或隐藏)。form.action 是 POST 并且每个输入字段都有一个唯一的名称(没有 name=foo[])。 每当我在提交表单后尝试
我很困惑 一劳永逸 VS 添加引用(/net 选项卡)说 dll 的 gac 在这里: 我发现这个包含 GAC 的文件夹:(附注:为什么有 3 个 Gac 类型?) 还有这个包含 GAC 的文件夹:
我有一个实现Comparable的对象列表。 我想对此列表进行排序,这就是我使用Comparable的原因。 每个对象都有一个字段 weight,它由另外 3 个成员 int 变量组成。 对于具有最大
在我们的系统中,有多个“站点”通过 WCF 相互通信。每个站点通过 NetTCP 绑定(bind)公开约 20 个接口(interface)。 当一个站点使用对等站点的接口(interface)时,它
我已经从 http://boost.teeks99.com/ 下载了 boost 1.58.0(预编译,x86,VC 12.0)并安装到C:\local\boost_1_58_0(我也试过自己用msv
所以...我有一个查询,该查询返回在我的网站上使用相同的电子邮件地址、密码和其他信息创建的用户帐户(是的,实现不好,不要问)。它通过从另一个程序获取用户 ID 来实现这一点。 我的 SQL 是 SEL
我知道这是一个有点菜鸟的问题,但我只是想问一下,如果我有太多 Controller ,这是好事还是坏事。假设我有一个网络应用程序,它有大约 12 个 View 。每个 View 都有自己的 Contr
我认为我的项目做了一些可笑的错误。我正在制作一个项目,基本上是一组 View Controller ,其中一些 Controller 上有视频,其他 Controller 上有图像。我创建了一个模型,
嘿,我正在创建一个电子商店并显示类别树和所有产品及其多种价格变化,我制作了 150 多个 mysql_query("SELECT ..."); 在一页上查询。 (如果我计算“while”循环)。 是不
我在 JS 方面遇到了问题。我正在尝试制作按类型排序的三个成分列表(用于酿造药水),所有这些都是标签内的复选框。 您应该选择(选中)三个列表中每一个的一个元素才能酿造一剂药水。如果您选择正确的成分并按
我是一名优秀的程序员,十分优秀!