想请教一下大家有没有遇到过升级bind版本后查询性能下降的问题,下面是9.16.49、9.18.25、9.12.3-P4三个版本的性能测试结果:
9.16.49 性能数据
查询 | 数量 |
---|---|
发送 | 135762 |
完全的 | (99.97%) 135719 |
丢失的 | (0.03%)43 |
- 响应代码:NOERROR 135719 (100.00%)
- 平均数据包大小:请求 35,响应 51
- 运行时间(秒):120.063225
- 每秒查询次数:1130.396089
- 平均延迟(秒):0.086731(最小 0.001513,最大 0.172726)
- 延迟标准差(秒):0.019442
9.18.25 性能数据
查询 | 数量 |
---|---|
发送 | 142300 |
完全的 | 142300 |
丢失的 | 0 |
- 响应代码:NOERROR 142300 (100.00%)
- 平均数据包大小:请求 35,响应 51
- 运行时间(秒):120.087726
- 每秒查询次数:1184.967063
- 平均延迟(秒):0.084285(最小 0.001735,最大 0.199955)
- 延迟标准差(秒):0.018229
9.12.3-P4性能数据
查询 | 数量 |
---|---|
发送 | 1016067 |
完全的 | (100.00%)1016040 |
丢失的 | (0.00%)27 |
- 响应代码:NOERROR 1016040 (100.00%)
- 平均数据包大小:请求 35,响应 51
- 运行时间(秒):120.014670
- 每秒查询次数:8465.965036
- 平均延迟(秒):0.011652(最小 0.001157,最大 0.034407)
- 延迟标准差(秒):0.001628
部署环境
- 操作系统:CentOS 7 2009
- 内核版本:3.10.0-1160.92.1.el7.x86_64
- 当前版本:BIND 9.12.3-P4 id:a3d2ae0
- 测试版本:BIND 9.16.49 和 9.18.25
- 测试工具:dnsperf
- 相关测试:5 个域名,使用命令 (
dnsperf -d dnstest.txt -s 10.0.3.12 -l 120
) 对内部域名进行 120 秒查询
编译命令
9.12.3 和 9.16.49
./configure \
--prefix=/usr/local/named \
--sysconfdir=/etc/named \
--with-dlz-mysql \
--enable-threads \
--enable-epoll \
--disable-chroot \
--enable-backtrace \
--enable-largefile \
--disable-ipv6 \
--with-openssl \
--with-libxml2
9.18.25
./configure \
--prefix=/usr/local/named \
--sysconfdir=/etc/named \
--disable-chroot \
--enable-largefile \
--with-openssl \
--with-libxml2
所有版本都已安装contrib/dlz/modules/mysql
。
BIND 配置
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/etc/named";
allow-query { any; };
forward first;
forwarders { 10.0.3.6; 10.0.0.221; 10.0.0.222; };
recursion yes;
max-cache-ttl 30;
};
logging {
channel default_log {
file "/var/log/bind/named.log" versions 10 size 200m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
channel query_log {
file "/var/log/bind/query.log" versions 10 size 200m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
channel error_query_log {
file "/var/log/bind/error_query.log" versions 1 size 200m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
channel resolver_log {
file "/var/log/bind/resolver.log" versions 10 size 200m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category default {default_log;};
category queries {query_log;};
category query-errors {error_query_log;};
category resolver {resolver_log;};
category lame-servers {null;};
category edns-disabled {null;};
};
dlz "Mysql zone" {
database "dlopen /usr/lib/bind9/dlz_mysql_dynamic.so
{host=10.0.3.26 dbname=dns ssl=false port=3306 user=dnsuser pass=aaaaabbbbbccccc threads=50}
{select zone from dns_records where zone = '$zone$' and view = 'any' limit 1}
{select ttl,type,if(mx_priority>0,mx_priority,NULL),case when lower(type)='txt' then concat('\"',data,'\"') when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum) else data end as mydata from dns_records where zone = '$zone$' and host = '$record$' and view = 'any'}";
};
答案1
很多很多个月前……在运行一组 BIND9 DNS 服务器时,我也注意到了这一点。根据您发布的编译内容,您很可能不仅可以恢复性能,还可以通过使用 GCC 编译时性能优化来提高性能?测试并试用它以查看,但我获得了显着的收益。如果您的工作量严格是权威答案,那就更好了。
大多数编译器都使用开箱即用的 -O2。尝试使用 -Ofast 宏扩展。阅读它并确定最适合您特定环境的扩展。收益是值得的!!!您可能需要返回并重新编译您自己的 openss 和 libxml2 库?如果您使用主线软件存储库中提供的内容,则它们经过编译后可在各种类似的硬件平台上工作并提供平均性能。针对您实际运行的平台/芯片组进行优化,并进行更多基本优化(即 -O2)。
差别是巨大的!!!这有点令人烦恼,但如果你记得你做了什么,你也可以用其他软件重现你的努力。性能改进是惊人的!在每个人眼中,你都会看起来像个超级英雄。他们会把你扛在肩上,抱着你四处走动,欢呼你的名字。你终于配得上在办公椅上披上斗篷了。将会有很多欢乐。万岁!