Questions tagged «vldb»

1
用于处理10亿行和计数的数据库设计
我们以大约5000 pr的速率接收实时GPS数据。分钟(来自4个TCP服务器)。每个服务器使用单个连接来插入数据,并在两次插入之间缓冲数据。每隔15分钟左右,服务就会获取一次此数据,并将其处理为行程。生成行程后,仅当用户希望在地图上查看路线时,实际的GPS数据通常并不那么重要。 问题是数据库似乎在努力跟上插入数据的速度。有时,当负载增加时,插入时间突然急剧增加(> 30秒),这又使更多数据得以缓冲,从而导致更大的插入量和更长的插入时间。 我希望能对当前的设计发表一些评论,以及一些我们必须提高性能的想法,并回答我们的一些问题-以及人们可能拥有的其他技巧! 当前设计 当前将数据分为代表一周的表格,并且将早于一年的数据存档到辅助数据库中。整个事物在可编辑视图中连接在一起,该视图用于插入和读取。 桌子设计 ID(PK,唯一标识符) DeviceId(FK,int) PersonId(FK,int) VehicleId(FK,int) TokenId(FK,int) UtcTime(PK,datetime2(3)) 纬度(浮动) 经度(浮点) 速度(smallint) 标题(smallint) 卫星(tinyint) IOData(varbinary(100)) IgnitionState(tinyint) UserInput(tinyint) CreateTimeUtc(datetime2(3)) 指标 DeviceId_CreateTimeUtc_Desc DeviceId_UtcTime_Desc(集群) PersonId_UtcTime_Desc TokenId_UtcTime_Desc VehicleId_UtcTime_Desc 当前每个星期(包括索引)占用大约10 GB的数据,并且主数据库中目前大约有300 GB的数据。 主数据库中的数据表具有自己的文件组,其中包含1个文件,但它与主数据库中的所有其他表位于同一磁盘上。辅助数据库位于不同的磁盘上,但位于同一台计算机上。 我认为,当使用新的表分区(一周)时,我们每周还会运行一次索引重建作业。不执行收缩。 该计算机是具有12 GB内存的8核HP,并且包含主数据库的磁盘正在运行RAID 10。 主意 将存储在主数据库中的数据量限制为最多1个月。至少它可以使数据库更易于管理以进行备份/还原,但是通过这样做,我们可以期望看到性能的提高吗? 在文件组中为当前数据创建2个文件,并将它们分发到2个不同的物理分区中 创建保存当前数据的主从数据库,因此在不同数据库上执行插入和读取操作 将当前数据文件放在SSD磁盘上(镜像是否会对SSD磁盘产生任何性能差异?) 请让我知道是否需要更多信息。影响性能的因素很多,并且可能有许多调整方法。

2
将DBCC CHECKDB划分为多天
我正在实施Paul Randal的方法,以针对大型数据库在几天内手动分布DBCC CHECKDB,该方法主要包括: 在7个存储桶之间大致平均地划分数据库中的表 每周运行一次DBCC CHECKALLOC 每周运行一次DBCC CHECKCATALOG 每周每天在一个存储桶上运行DBCC CHECKTABLE 有人使用过这种技术吗?有没有现有的脚本? 我担心这可能无法涵盖CHECKDB所做的一切;CHECKDB的联机丛书文档说,除了CHECKALLOC,CHECKCATALOG和CHECKTABLE外,它还: 验证数据库中每个索引视图的内容。 使用FILESTREAM将varbinary(max)数据存储在文件系统中时,验证表元数据与文件系统目录和文件之间的链接级一致性。(仅适用于SQL 2008) 验证数据库中的Service Broker数据。 所以这是我的问题: 这些额外检查是否必要/重要?(索引视图可能与我有关,我认为我们还没有使用Service Broker或FILESTREAM。) 如果是这样,是否有办法分别执行这些附加检查? CHECKALLOC和CHECKCATALOG似乎运行非常快,即使在大型数据库上也是如此。有什么理由不每天运行这些? (注意:这将是数百个服务器中成千上万个现有数据库的标准例程,或者至少是一定规模的每个数据库的标准例程。这意味着诸如重组所有数据库以使用CHECKFILEGROUP之类的选项对我们而言并不实际。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.