在我们的sybase ASE 15.7 db中,我们有一个包含4列的表
uid int
id varchar 32
version varchar 32
xml text
分别在uid和id上的两个索引;数据行锁定;约130行数据
我们还有2k的页面大小; xml长度最小1012 /最大5176 / avr1837。目前不在行LOB
问题在于,有时简单的插入操作需要10到15秒钟,而我却很难理解原因。
答案 0 :(得分:0)
我想您需要测试它听起来很明显,但是它是进行此类更改的关键。关于文本列的事情实际上是在表的末尾有大量数据,这些数据可以成为争用和阻止的焦点。
也就是说,在您的特定示例中,平均行大小非常接近Sybase服务器页面大小的最大大小(1962字节)。您不能在2k页服务器上将其设置为2000,因为它大于您的页大小(以字节为单位)。
实际上,您必须将其设置为1894,这是最大行大小减去其他列的大小,但这可能有点接近最大值,因此这取决于ID和版本列的填充程度。
您也没有指定使用哪种类型的索引,即聚集索引还是非聚集索引,因为如果它们不是非聚集索引,那么它仍然是一个堆表,并且可能会受到最后一页链争用的影响。您也不会量化表的行数或其他任何有关插入速度太慢的原因(例如事务量等)的信息,因此请考虑将此信息添加到您的帖子中(例如查询计划等),或者ID是否像插入等等的热点。
行内LOB可以很好地处理正确的数据。