1.
防止包打开后hang住,可以使用delay validation=false.
2.2008R2 configuration 起作用的优先级?
一是des ign time.
二是运行的时候指定的文件
2012的parameter 则是相反。
3.注意SSIS包的32位与64位跑的区别?
agentjob
默认是64位的去跑,如果你是包需要在32位下面跑,有选项可以勾选。
你可以使用不同folder下面的dtsexec去跑你的job.
第三方的driver也许需要设置allow in process?
4.load flat file 可以在source 组件上去掉某些列,但是不能在connection manager上改。
5.SP 作为数据源的时候会有一些问题,set fmtonly off.
SP无法获取元数据。
SSIS 去拿元数据的时候,如果是从存储过程中去拿时候,需要把存储过程执行完才可以。
6.INDEX:
index structure:
include index 中的include 部分是存放在叶子结点中的。
复合索引与include索引的区别?
复合索引的键值都包含在索引的非叶子结点中,但是只能使用排在第一个的字段进行seek,其他的进行scan.
而include的非叶子结点的键值只有键值字段,include字段只存在叶子结点层。
index seek与index scan 的区别?
index seek是在非叶子结点进行查找,而index scan是在叶子结点进行线性扫描。
7.查询优化器:
创建了索引之后?查询优化器何时会使用它?怎么判断要使用它?
选择unique度比较高字段指定一个作为索引键。一个表在操作的时候只能使用一个索引。
8.存储过程的参数嗅探
第一次编译的时候根据传递的参数产生的执行计划,往往会被重用,但后来传递的参数也许与原来的巨大的不同,造成查询效率巨慢。
这个时候非常建议存储过程重新编译执行计划,这时候可以使用一个关键字指定要求它做这个重编译。
9.exec sp with recompile.
parameter sniffering
一个中庸的计划是不在SP中直接让参数参与语句,而是把参数给本地变量,然后使用变量参与Sql语句的查询。
10.nested looped :
for 让小的结果集放在外面,不要放在里面。切记。
内存使用比较少,driven table存储里表的是一条一条地取。
scan ,loop join 对于查询结果比较漫长的query 第一感觉是看这些。
如果预计的行数与实际的行数差很多,sqlserver 就很有可能弄错了。
第二种是merge join.
两边的结果集都已排序然后。。。。
这样就无所谓某个表做driven table, 避免了上一个方法的bug.
内存需求不是太多。缺点就是需要两边都需要排序。
11.从右下到左上这是看执行计划的方法。
HASH table
找到一个相对小的表,建成桶。
优点:不需要索引,good for ad-hoc query.
有可能占用巨大的内存,选错了build table.
首先就是要让他们去更新统计信息。然后再执行去看看。然后再drop cache再看看。
他估计的时候是单次的,所以要让次数乘以每次估计的行数与实际的行数相比较。
with force order(强制按你写的表顺序进行join)
with tablelock. 可以好很多。
maxdoop 并发度的问题。
cpu contextswitch
原文:http://www.cnblogs.com/huaxiaoyao/p/3634994.html