大家好,
最近下了一个 SQL 2014 64位企业版, 安装环境:WIN7 X64 企业版
台式机环境为: I7 4770K, 16G 内存 , 机械硬盘;
一张是传统的表 disk_card , 一张是内存表 snap_card,结构完全相同
两张表记录条数,均为 27752311 条, 而且内容完全一样(从disk__card 整表复制到snap__card的)
disk_card 无索引 ( 其实它是 select .... into ... 语句创建的)
snap_card 的关键字
WITH ( BUCKET_COUNT = 60000000)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
按照文档 bucket_count 的数量 相对也足够;
这时候, 查询
select count(*) from disk_card
耗时 1秒钟, 重新查询多次,每次都是1秒钟
查询
select count(*) from snap_card WITH (SNAPSHOT)
每次都是6秒钟
就算加上where 子句, 也是disk_card的要明显快;
不知道问题会在哪儿 我猜测了几个可能性,但是不太好证明;
1. 内存表创建有问题;
(如果不去做速度比较, 它可正常的很)
2. X64的SQL2014企业版应该装到 SERVER 2008 或者其他 服务器才可发挥性能。
(http://www.itpub.net/thread-1905086-1-1.html 这位同仁配置很好,貌似也一样 说 慢)
这个现象, 大家怎么看, 最近这段时间我会持续关注这个,若有进展,也跟大家分享。
内存太小了,建议服务器内存起码上256GB的。
恩, 内存是小了, 16G; 不过条件限制, 没办法在更高级的设备上做此测试;
测试的时候,我也关注了一下内存占用的方面; 下面我补充一下测试环境:
select @@VERSION
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
2 snap_card 填数据之前, WINDOWS 内存占用比例为 19% (总共 16G), 数据装满 27752311 条 之后,
内存占用 上升到 65%。
回复 【苏小喵 】
看样子还剩下不少的内存, 执行一天简单的语句,感觉应该不是问题;
另外,今天早晨过来, 重新打开企业管理器测试:
执行 select count(*) from disk_card; (传统数据表)
第一次 16秒, 第二次之后测试了十几次, 都是0 秒或者1秒
100000
执行 select count(*) from snap_card; (内存表)
每次都是6秒
对于disk_card 第二次之后的“快”, 估计可以用 首次执行 编译时间 + 缓存建立 来理解, 因为语句简单, 编译时间基本可以忽略,
主要是缓存帮忙省了时间; 对此我在做一个测试:
我选对两张表, 都运行一个带 WHERE 子句的查询, (返回记录数结果是 17752311 条 )
select count(id) from disk_card where id > 117607922, 耗时 0 秒 ( 毫秒级忽略吧,查询时间计数器没跳表)
select count(id) from snap_card where id > 117607922 耗时 6秒
测试这些命令的时候,服务器内存的占用保持稳定在 72%左右,那么问题来了:
一个是缓存 disk_card, 一个是内存 snap_card,目前表现来看 , 内存snap_card耗时很稳定, 但是相对很慢,
貌似snap_card 有点孤立无援, 没有享受到传统表的缓存机制, 用词不当的还请见笑了。