Oracle Orion Calibration Tool
Oracle Orion是一种用来在没有安装Oracle或没有创建数据库的情况下来预测Oracle数据库性能的工 具。不像其它的I/O校准工具,Oracle Orion是特定为模拟Oracle数据库I/O工作量而设计的。Orion 可以通过Oracle ASM来模拟条带的性能。Orion可以使用不同的I/O负载来检测性能指标,比如 MBPS,IOPS与I/O延迟。
执行Orion需要注意以下两个问题:
.当存储是空闲或者接近空闲时执行。Orion校准存储性能是基于它所生成的I/O负载,如果在执行 Orion的同时也执行了其它非Orion的I/O工作量,那么Orion将不能正确评估性能指标。
.如果数据库已经在存储中创建,执行dbms_resource_manager.calibrate_io()时存储是一种选择。
执行Orion的步骤
1.使用-testname参数来指定一个测试名。这个参数用来唯一标识运行的Orion
2.基于测试名创建一个Orion输入文件,并且它的文件名与-testname参数所指定的测试名要相同,其 缺省的输入文件为orion.lun,例如,创建一个jytest.lun。在输入文件中列出裸设备或要测试的文 件。在输入文件的每一行添加一个卷名,不要加入任何注释。例如:
[oracle@jyrac1 bin]$ vi jytest.lun /dev/raw/raw1 /dev/raw/raw2 /dev/raw/raw3
3.验证输入文件中所指定的所有卷,例如jytest.lun。对于在linux系统中执行以下命令进行检查:
[oracle@jyrac1 bin]$ dd if=/dev/raw/raw1 of=/dev/null bs=32k count=1024 1024+0 records in 1024+0 records out 33554432 bytes (34 MB) copied, 1.76808 seconds, 19.0 MB/s [oracle@jyrac1 bin]$ dd if=/dev/raw/raw2 of=/dev/null bs=32k count=1024 1024+0 records in 1024+0 records out 33554432 bytes (34 MB) copied, 1.91884 seconds, 17.5 MB/s [oracle@jyrac1 bin]$ dd if=/dev/raw/raw3 of=/dev/null bs=32k count=1024 1024+0 records in 1024+0 records out 33554432 bytes (34 MB) copied, 1.51707 seconds, 22.1 MB/s
4.第一次执行Orion时,使用oltp或dss选项的-run参数。如果数据库主要用于OLTP,那么使用-run oltp。如果数据库主要用于DSS,那么使用-run dss。
例如
[oracle@jyrac1 bin]$ ./orion -run oltp -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161011_2122 Calibration will take approximately 24 minutes. Using a large value for -cache_size may take longer. Maximum Small IOPS=911 @ Small=60 and Large=0 Small Read Latency: avg=65784 us, min=2256 us, max=721805 us, std dev=58565 us @ Small=60 and Large=0 Minimum Small Latency=10292 usecs @ Small=3 and Large=0 Small Read Latency: avg=10292 us, min=968 us, max=164951 us, std dev=7615 us @ Small=3 and Large=0 Small Read / Write Latency Histogram @ Small=3 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 2 0 1024 - 2048 us: 17 0 2048 - 4096 us: 1291 0 4096 - 8192 us: 7044 0 8192 - 16384 us: 6899 0 16384 - 32768 us: 1870 0 32768 - 65536 us: 279 0 65536 - 131072 us: 25 0 131072 - 262144 us: 5 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
在orion命令执行完后会生成以下文件:
[oracle@jyrac1 bin]$ ls -lrt jytest* -rw-r--r-- 1 oracle oinstall 43524 Oct 11 21:42 jytest_20161011_2122_trace.txt -rw-r--r-- 1 oracle oinstall 1930 Oct 11 21:42 jytest_20161011_2122_summary.txt -rw-r--r-- 1 oracle oinstall 570 Oct 11 21:42 jytest_20161011_2122_mbps.csv -rw-r--r-- 1 oracle oinstall 800 Oct 11 21:42 jytest_20161011_2122_lat.csv -rw-r--r-- 1 oracle oinstall 742 Oct 11 21:42 jytest_20161011_2122_iops.csv -rw-r--r-- 1 oracle oinstall 19369 Oct 11 21:42 jytest_20161011_2122_hist.txt
orion执行的汇总结果存储在*_summary.txt文件中:
[oracle@jyrac1 bin]$ cat jytest_20161011_2122_summary.txt ORION VERSION 11.2.0.4.0 Command line: -run oltp -testname jytest These options enable these settings: Test: jytest Small IO size: 8 KB Large IO size: 1024 KB IO types: small random IOs, large random IOs Sequential stream pattern: one LUN per stream Writes: 0% Cache size: not specified Duration for each data point: 60 seconds Small Columns:, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60 Large Columns:, 0 Total Data Points: 23 Name: /dev/raw/raw1 Size: 5368709120 Name: /dev/raw/raw2 Size: 5368709120 Name: /dev/raw/raw3 Size: 10737418240 3 files found. Maximum Small IOPS=911 @ Small=60 and Large=0 Small Read Latency: avg=65784 us, min=2256 us, max=721805 us, std dev=58565 us @ Small=60 and Large=0 Minimum Small Latency=10292.33 usecs @ Small=3 and Large=0 Small Read Latency: avg=10292 us, min=968 us, max=164951 us, std dev=7615 us @ Small=3 and Large=0 Small Read / Write Latency Histogram @ Small=60 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 2 0 1024 - 2048 us: 17 0 2048 - 4096 us: 1291 0 4096 - 8192 us: 7044 0 8192 - 16384 us: 6899 0 16384 - 32768 us: 1870 0 32768 - 65536 us: 279 0 65536 - 131072 us: 25 0 131072 - 262144 us: 5 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
Orion输入文件
当指定Orion -testname 参数时,这将设置Orion输入与输出的文件名的前缀。-testname 选项的缺省值为orion
Orion参数
Orion提供了命令参数来指定I/O工作量类型与其它Orion选项。
-run参数是Orion命令必须要指定的。
-run level选项,指定测试运行的级别level。这个选项提供了运行级别并且允许复杂命令来指定高 级级别。如果没有设置 -run advanced,那么设置任何其它参数,比如-cache_size或-verbose,都会 报错。
除了高级级别之外,所有其它的-run level设置将使用一组预定义参数设置。
level必须是以下之一:
.oltp
测试在增加负载时使用随机小(8K)I/O来判断最大的IOPS。这个参数相关的Orion调用如下:
/orion -run advanced \ -num_large 0 -size_small 8 -type rand \ -simulate concat -write 0 -duration 60 \ -matrix row
.dss
测试在增加负载时使用随机大(1M)I/O来判断最大的吞吐量。这个参数相关的Orion调用如下:
./orion -run advanced \ -num_small 0 -size_large 1024 -type rand \ -simulate concat -write 0 -duration 60 \ -matrix column
.simple
对负载生成小的随机I/O与大的随机I/O工作量。在这个选项中,小I/O与大I/O是隔离进行测试。唯一 能指定的选项参数是-cache_size与-verbose。这个参数相关的Orion调用如下:
./orion -run advanced \ -size_small 8 -size_large 1024 -type rand \ -simulate concat -write 0 -duration 60 \ -matrix basic
.normal
与simple相同,但也会生成小的随机I/O与大的随机I/O工作量。对于这个级别唯一能指定的选项参数 是-cache_size与-verbose。这个参数相关的Orion调用如下:
./orion -run advanced \ -size_small 8 -size_large 1024 -type rand \ -simulate concat -write 0 -duration 60 \ -matrix detailed
.advanced
使用自定义的选项参数来测试工作量。对于这个级别可以指定任何选项参数。
Orion的选项参数
-cache_size:指定存储阵列读取或写入的缓存大小(in MB)。对于大的连续 I/O工作量,Orion在每个 数据点之前执行随机大I/O来加热缓存。Orion使用缓存的大小来决定缓存加热的持续周期。如果设置 为0,将不会执行缓存加热。除非这个选项设置为0,Orion在每个大的连续的数据点之前执行随机I/O。 这些I/O将会填充到存储阵列的缓存中。使用随机数据,因此从一个数据点的I/O请求不会在下一个数 据点的命中。它的缺省值,如果没有指定,缺值为2分钟。
-duration num_seconds:测试每个数据点的测试持续时间,缺省值是60
-help:打印Orion帮助信息。
-matrix type:设置混合工作量类型。一个Orion测试可以由多个数据点测试组成。数据点测试可以用 两个维度的混合组成。 在混合工作量类型中每一列代表相同小I/O负载的数据点测试。每一行代表 相同大I/O负载的数据点测试,Orion测试可以是单点,单行,单列或整个混合工作量,依赖于混合类 型:
.basic:不是混合工作量。小的随机与大的随机/连续工作量是分别进行测试。
.detailed:小的随机与大的随机/连续工作量是组合进行测试,测试整个混合工作量。
.point:使用S指示使用小的随机I/O或连续流的单个数据点与使用L指示使用大的随机I/O或连续流的 单个数据点。S是通过-num_small参数进行设置。L是通过-num_large参数进行设置。使用-num_small 测试小I/O,-num_large测试大I/O。
.col:只用于大的随机/连续工作量。使用-num_large大I/O来测试不同大小的小I/O负载。
.row:只用于小的随机工作量。使用-num_large大I/O来测试不同大小的小I/O负载
.max:与deatiled一样,但只在最大负载测试工作量,指定-num_small与-num_large参数。测试的不 同大小负载受限于-num_small与-num_large。
它的缺省值是basic。
-num_disks value:指定测试的物理磁盘数。为了生成一个范围的负载。指定磁盘数。这里的value被 用来保存一定范围的负载。增加这个参数会造成严重的I/O负载。它的缺省值是testname.lun中的lun 数。
-num_large value:控制大I/O负载。注意,它是当指定-matrix时的唯一选项:row,point或max。当- type选项被设置rand,这个参数value指定显著数量的大I/O。
当-type选项设置为seq,这个参数value 指定连续I/O流的数量。
-num_small:指定小随机I/O工作量的显著I/O的最大数量。注意这个选项只能在指定-matrix 为:col,point或max时才能使用。
-simulate type:数据分布来模拟大的连续I/O工作量。Orion通过以以下方式来组合特定的LUN来以虚 拟LUN的格式来进行测试:
.concat:通过连续链接的特定LUN来模拟虚拟卷组。连续测试是一个LUN接着一个LUN的进行。
.raid0:通过跨指定的LUN条带化来模拟虚拟卷组。每个连续流使用raid0条带来跨所有LUN执行I/O。 缺省的条带深度是1M,为了匹配ASM的条带深度,可以使用-stripe参数进行修改。
I/O的偏移量由以下因素决定:
对于小的随机与大的随机工作量:
.LUN被链接成单个虚拟LUN(VLUN)并且对于VLUN选择随机偏移量。
对于大的连续工作量:
.使用条带(-simulate raid0)。LUN被用来创建单个条带化的VLUN。不使用并发的小的随机工作量, 连续流在条带VLUN时使用固定偏移量。对于n streams,stream 1在偏移量VLUN size*(i+1)/(n+1), 除非n为1,在这种情况下,单个流在offset 0开始。使用并发小的随机工作量,流在使用条带VLUN使 用随机偏移量。
.不使用条带(-simulate concat)。LUN被连接成单个VLUN。流从单个VLUN的随机偏移量开始。
这个参数通常只用于-type为seq。
-size_large num:指定大的随机或连续I/O工作量的I/O大小以KB为单位,缺省值为1024。
-size_small num:指定小的随机或连续I/O工作量的I/O大小以KB为单位,缺省值为8。
-testname tname:指定运行测试的标识符。当指定时,包含LUN磁盘的输入文件,或文件必须命名为 .lun。输出文件名以_.为前缀。缺省值为:orion
-type[rand | seq]:大I/O工作量类型,rand:随机分布的大I/O,seq:连续流大I/O,缺省值为rand
-verbose:打印状态与跟踪信息来标准输出。缺省值为option not set
-write num_write:指定被写入的I/O百分比。对于大的连续I/O,每个流要么是只读,要么是写,这个参数指定只写的百分比。缺省值为0。
Orion命令行示例
1.对于OLTP数据库来评估存储的IO性能
[oracle@jyrac1 bin]$ ./orion -run oltp -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161011_2122 Calibration will take approximately 24 minutes. Using a large value for -cache_size may take longer. Maximum Small IOPS=911 @ Small=60 and Large=0 Small Read Latency: avg=65784 us, min=2256 us, max=721805 us, std dev=58565 us @ Small=60 and Large=0 Minimum Small Latency=10292 usecs @ Small=3 and Large=0 Small Read Latency: avg=10292 us, min=968 us, max=164951 us, std dev=7615 us @ Small=3 and Large=0 Small Read / Write Latency Histogram @ Small=3 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 2 0 1024 - 2048 us: 17 0 2048 - 4096 us: 1291 0 4096 - 8192 us: 7044 0 8192 - 16384 us: 6899 0 16384 - 32768 us: 1870 0 32768 - 65536 us: 279 0 65536 - 131072 us: 25 0 131072 - 262144 us: 5 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
2.对于DSS数据库评估存储IO性能
[oracle@jyrac1 bin]$ ./orion -run dss -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161012_1736 Calibration will take approximately 73 minutes. Using a large value for -cache_size may take longer. ORION VERSION 11.2.0.4.0 Command line: -run dss -testname jytest These options enable these settings: Test: jytest Small IO size: 8 KB Large IO size: 1024 KB IO types: small random IOs, large random IOs Sequential stream pattern: one LUN per stream Writes: 0% Cache size: not specified Duration for each data point: 240 seconds Small Columns:, 0 Large Columns:, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45 Total Data Points: 18 Name: /dev/raw/raw1 Size: 5368709120 Name: /dev/raw/raw2 Size: 5368709120 Name: /dev/raw/raw3 Size: 10737418240 3 files found. Maximum Large MBPS=141.56 @ Small=0 and Large=27
3.对于基本的数据集评估存储IO性能
[oracle@jyrac1 bin]$ ./orion -run normal -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161012_1923 Calibration will take approximately 113 minutes. Using a large value for -cache_size may take longer. Maximum Large MBPS=124.02 @ Small=0 and Large=6 Maximum Small IOPS=691 @ Small=15 and Large=0 Small Read Latency: avg=21670 us, min=1325 us, max=430186 us, std dev=21687 us @ Small=15 and Large=0 Minimum Small Latency=7141 usecs @ Small=1 and Large=0 Small Read Latency: avg=7141 us, min=934 us, max=212964 us, std dev=5383 us @ Small=1 and Large=0 Small Read / Write Latency Histogram @ Small=1 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 4 0 1024 - 2048 us: 24 0 2048 - 4096 us: 1398 0 4096 - 8192 us: 4993 0 8192 - 16384 us: 1672 0 16384 - 32768 us: 250 0 32768 - 65536 us: 20 0 65536 - 131072 us: 5 0 131072 - 262144 us: 1 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
4.为了理解存储性能使用只读,小与大的随机I/O工作量:
[oracle@jyrac1 bin]$ ./orion -run simple -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161012_2122 Calibration will take approximately 23 minutes. Using a large value for -cache_size may take longer. Maximum Large MBPS=125.09 @ Small=0 and Large=6 Maximum Small IOPS=696 @ Small=15 and Large=0 Small Read Latency: avg=21501 us, min=807 us, max=351786 us, std dev=22448 us @ Small=15 and Large=0 Minimum Small Latency=6916 usecs @ Small=1 and Large=0 Small Read Latency: avg=6916 us, min=774 us, max=174704 us, std dev=4991 us @ Small=1 and Large=0 Small Read / Write Latency Histogram @ Small=1 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 3 0 1024 - 2048 us: 23 0 2048 - 4096 us: 1480 0 4096 - 8192 us: 5299 0 8192 - 16384 us: 1611 0 16384 - 32768 us: 196 0 32768 - 65536 us: 22 0 65536 - 131072 us: 4 0 131072 - 262144 us: 3 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
5.为了理解存储性能使用小与大混合的随机I/O工作量:
[oracle@jyrac1 bin]$ ./orion -run normal -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161012_1923 Calibration will take approximately 113 minutes. Using a large value for -cache_size may take longer. Maximum Large MBPS=124.02 @ Small=0 and Large=6 Maximum Small IOPS=691 @ Small=15 and Large=0 Small Read Latency: avg=21670 us, min=1325 us, max=430186 us, std dev=21687 us @ Small=15 and Large=0 Minimum Small Latency=7141 usecs @ Small=1 and Large=0 Small Read Latency: avg=7141 us, min=934 us, max=212964 us, std dev=5383 us @ Small=1 and Large=0 Small Read / Write Latency Histogram @ Small=1 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 4 0 1024 - 2048 us: 24 0 2048 - 4096 us: 1398 0 4096 - 8192 us: 4993 0 8192 - 16384 us: 1672 0 16384 - 32768 us: 250 0 32768 - 65536 us: 20 0 65536 - 131072 us: 5 0 131072 - 262144 us: 1 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
6.为了生成32KB与1MB的读取组合的随机I/O执行以下命令:
[oracle@jyrac1 bin]$ ./orion -run advanced -size_small 32 -size_large 1024 -type rand - matrix detailed -testname jytest ORION: ORacle IO Numbers -- Version 11.2.0.4.0 jytest_20161012_2153 Calibration will take approximately 113 minutes. Using a large value for -cache_size may take longer. Maximum Large MBPS=122.87 @ Small=0 and Large=6 Maximum Small IOPS=578 @ Small=15 and Large=0 Small Read Latency: avg=25892 us, min=2162 us, max=390074 us, std dev=24858 us @ Small=15 and Large=0 Minimum Small Latency=7386 usecs @ Small=1 and Large=0 Small Read Latency: avg=7386 us, min=1196 us, max=140649 us, std dev=4656 us @ Small=1 and Large=0 Small Read / Write Latency Histogram @ Small=1 and Large=0 Latency: # of IOs (read) # of IOs (write) 0 - 1 us: 0 0 2 - 4 us: 0 0 4 - 8 us: 0 0 8 - 16 us: 0 0 16 - 32 us: 0 0 32 - 64 us: 0 0 64 - 128 us: 0 0 128 - 256 us: 0 0 256 - 512 us: 0 0 512 - 1024 us: 0 0 1024 - 2048 us: 5 0 2048 - 4096 us: 940 0 4096 - 8192 us: 4859 0 8192 - 16384 us: 2060 0 16384 - 32768 us: 204 0 32768 - 65536 us: 15 0 65536 - 131072 us: 6 0 131072 - 262144 us: 1 0 262144 - 524288 us: 0 0 524288 - 1048576 us: 0 0 1048576 - 2097152 us: 0 0 2097152 - 4194304 us: 0 0 4194304 - 8388608 us: 0 0 8388608 - 16777216 us: 0 0 16777216 - 33554432 us: 0 0 33554432 - 67108864 us: 0 0 67108864 - 134217728 us: 0 0 134217728 - 268435456 us: 0 0
7.为了生成多路1M写入流,模拟1MB的RAID-0条带:
./orion -run advanced -simulate raid0 -stripe 1024 -write 100 -type seq -matrix col - num_small 0 -testname jytest
8.为了生成32KB与1MB的组合随机读取:
./orion -run advanced -size_small 32 -size_large 1024 -type rand -matrix detailed - testname jytest
9.为了生成多路连续IMB的写入流,并模拟RAID0条带:
./orion -run advanced -simulate raid0 -write 100 -type seq -matrix col -num_small 0 - testnmae jytest
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-2126346/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26015009/viewspace-2126346/