楼主: 童馨

[精华] 数据库性能优化有奖问答—微软数据库专家唐云鹏先生坐堂ITPUB与大家共同交流!

[复制链接]
论坛徽章:
2
蛋疼蛋
日期:2013-01-22 12:50:042013年新春福章
日期:2013-02-25 14:51:24
51#
发表于 2012-12-18 21:07 | 只看该作者
我也来支持下,虽然重来不用

使用道具 举报

回复
论坛徽章:
0
52#
发表于 2012-12-19 11:35 | 只看该作者
关注并支持一下...

使用道具 举报

回复
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22灰彻蛋
日期:2012-05-31 10:18:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33
53#
发表于 2012-12-20 09:00 | 只看该作者
对于团购、秒杀类型的项目,在系统设计和优化时需要考虑哪些方面和使用哪些SQL Server技术或新特性来支持系统的性能...

使用道具 举报

回复
论坛徽章:
0
54#
发表于 2012-12-20 09:53 | 只看该作者
buptdream 发表于 2012-12-13 14:57
1:sql server需要做哪些工作可以在高并发方面提供良好的性能?
2:sql server不能在数据库块来实现行级锁, ...

1. 在上层:你可以对大表做分区,然后针对表分区进行并发操作;在底层:你可以建立文件组,文件组包含多个数据文件,在读写上如果不强制并发数等于1的话会默认并发访问所有数据文件
2. 如果表加入了索引,在执行DML操作时是默认行级锁的,但需要注意对一张表进行行级锁不能过多,如果一张表超过5000个行锁将提升为表锁

使用道具 举报

回复
论坛徽章:
0
55#
发表于 2012-12-20 09:59 | 只看该作者
buptdream 发表于 2012-12-13 15:36
3:sql server建立数据库的时候,将日志的增长方式设定为自动增长,运行时间长了,就会产生文件碎片,从而导 ...

首先不建议日志文件从默认大小自动增长,你可以预先评估每日或一定周期内(日志备份周期)的数据变化量,然后预先分配一个较大的文件Size给日志文件,如果日志文件再写满则再自动增长

可避免几个问题:
1. 日志文件频繁自动增长导致大量事务等待日志文件扩展
2. 避免大量的日志文件自增的碎片产生

使用道具 举报

回复
论坛徽章:
0
56#
发表于 2012-12-20 10:05 | 只看该作者
buptdream 发表于 2012-12-13 15:36
4:在sql server中,如果一个sql的执行计划经常发生改变,如何为这个sql固定住执行计划?

1. 你可以强制SQL语句执行某个执行计划(具体的操作和注意事项请查与MSDN),此操作不推荐,常规做法是创建统计,随着执行的次数、数据量变化等,由SQL自动选择执行计划
P.S.执行计划并不一定都是最优的,SQL在选择执行计划时,将根据执行计划匹配度和选择执行计划的时间成本来给予一个可接受的执行计划
2. 尽量避免拼凑SQL语句,并尽量绑定变量,从而减少硬解析

使用道具 举报

回复
论坛徽章:
0
57#
发表于 2012-12-20 10:21 | 只看该作者
buptdream 发表于 2012-12-13 15:36
5:默认情况下,sql server自动创建统计和自动更新统计设置默认是开启的,那么自动异步统计设置如何去设置, ...

5. 选择你的Database属性-Options-Automatic-Auto Update Statistics Asynchronously 设置为 True
开启后当你查询部分统计相关的系统视图时尤其是在数据库繁忙时间内,你将发现获取到的统计信息可能比较旧

6. 如果频繁出现死锁,你可以加入DBCC TRACE ON\OFF 标志1204 并检查输出到ERRORLOG的日志或在SQL Server数据库引擎服务的启动参数中加入 T1204进行跟踪

7. 建立索引:不建议在BIT类型上建立,BIT类型的数据离散度是最差的,几乎没有创建索引的意义

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
58#
发表于 2012-12-20 10:34 | 只看该作者
本帖最后由 hackace 于 2012-12-20 15:17 编辑

有几个问题想请教一下唐老师,
1,上面有人提到了not exists跟left join &&is null , 无论从可读性还是从性能方面,我们都应该用not exists来代替left join &&is null,对吧? 还是不对?

2,string summary的算法是什么? 比如说下面的语句like '%Abingdon%' ,SQL Server也能够预估到19.81行(EstimateRows),这个19.81具体是怎么算出来的?
use AdventureWorks
go
select * from  Person.Address where city like '%Abingdon%'

3,操作系统的preemptive scheduling mechanism 对SQLOS的cooperative scheduling mechanism 有何影响?也就是说一个被SQLOS 调度但还没有yield的 worker thread 会不会依然被preemptive scheduling mechanism 强占?如果没有的话,那OK,如果还是会被强占的话,那SQLOS的cooperative scheduling mechanism 的意义何在?

4,一个在备份结束之前已经提交的事务,是否保证在还原的时候,它也一定存在,而没有被undo等?如果能保证,那OK,如果不能,那为什么?

5,SQL server 的cost model是什么,具体的公式是什么样的? 比如说一个T-SQL的StatementSubTreeCost最后算下来是''0.0032831", 那么这个''0.0032831",具体是怎么来的,公式是什么?我知道总的来说COST是IO,CPU加操作符的各个COST的总和,但我想问的是具体的IO,CPU,操作符的COST是如何计算出来的? 比如IO的COST是 0.0022361 ,CPU的COST0.0012083 ,是怎么计算出来的?

6,微软的内存数据库Hekaton的消息最近比较多,我也看到了它的论文 “http://vldb.org/pvldb/vol5/p298_per-akelarson_vldb2012.pdf
在文中 2.5 Version Visibility 的说明中有2个地方,
"Begin field contains a transaction ID "  TB 的状态是Active state,那它对其他事务是不可见的
,"End field contains a transaction ID".  TE 的状态是Active state,那它对其他事务是不可见的
这两种情况下,只要它的状态是Active state的,对其他的事务都是不可见的,那么这个记录在此刻对其他的事务来说就是“丢失”了,这个情况很可怕啊,怎么解释呢,是不是论文写错了?

使用道具 举报

回复
论坛徽章:
0
59#
发表于 2012-12-20 10:37 | 只看该作者
smilefish 发表于 2012-12-13 17:51
IN 和 NOT IN 真的会导致全表扫描?

IN 不一定会,NOT IN 一定会,建议采用 Exist

使用道具 举报

回复
论坛徽章:
0
60#
发表于 2012-12-20 10:43 | 只看该作者
buptdream 发表于 2012-12-13 21:57
最近有一个项目,需要把数据库从sql server2000迁移到2005上面,请问在性能优化方面有哪些需要注意的地方? ...

1. 采用X64版本
2. 锁定内存页并设置内存最大最小值,固化内存空间给SQL
3. 用户数据库数据文件:根据实际业务和管理需要分多个文件组、每文件组包含多个固定大小(不自动增长)数据文件
4. 用户数据库日志文件:放置到RAID1或RAID10组上,给予一个较大初始值
5. TempDB:放置到专属RAID组上,同时给予一个较大Size,根据CPU Core划分多个子数据文件
6. 进行用户数据库全备一次,然后实施自动化数据库、日志备份策略

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表