直方图是一种统计报告,它可以显示在某个最小值和最大值之间的值的等级或范围内值出现的频率。让我们以学生的考试成绩结果为例来进行说明。假定有 30 个学生参加考试,最低分为 51,最高分为 100。您希望在最低分和最高分之间生成若干个等级,并计算每个等级内的结果数目,从而了解整个班级的分数分布情况。如果您希望生成五个范围大小相似的连续等级,则可得到如下的等级和范围:50 到 60、60 到 70、70 到 80、80 到 90、90 到 100(下限不包括在内,但包括上限)。该直方图包括各个等级以及每个等级内的结果数目。
同样,利用直方图,您可以分析网络中在服务器上设置的性能计数器(例如,CPU 利用率、内存)的值的采样。例如,假设您每隔五分钟就记录某一网络服务器的 CPU 利用率,某天测得的值在 21% 到 100% 之间变动。您可以生成有四个等级的直方图 — 20 到 40、40 到 60、60 到 80、80 到 100 — 从而得出属于每个等级的样本数。如果您的服务器在那一天超负荷地工作,那么大多数样本会属于第四个等级。
生成性能计数器直方图
下面是一个涉及直方图的问题;您可以看看自己是否能在读到我的解决方案之前就解决它。一个已调度的 SQL Server 代理作业将在一个名为 Samples 的表中定期记录某网络服务器的性能计数器的采样。运行 清单 1 显示的代码,创建 Samples 表并向其中填充数据。采样 (dt) 后,该表的每一行都包含度量 ID (measid)、度量值 (value) 和表示表中其他列的筛选列(100 字节)。(例如,该表通常包括一个 serverid 列,这样您可以记录多个服务器的度量样本。考虑到这个问题,在此示例中,让该表只包含一个服务器的数据。)
假设 measid 1 是 CPU 利用率百分比,measid 2 是以兆字节为单位的内存使用量。您的用户需要直方图来帮助他们分析在一段时期内某个度量的性能数据。用户提供了以下参数:等级数 (@numsteps)、度量 ID (@measid) 和日期范围(@fromdt — 包括起始日期,@todt — 不包括终止日期)。您的任务是生成这些给定参数的直方图。请注意,您不必在结果中包括样本数为 0 的等级。例如,假设用户提供了以下参数: