您能帮助我理解在DB2设置级别使用extended_row_sz参数的利弊吗?我们是否只能为特定表空间设置这些内容?如果未启用extended_row_sz设置,则不允许创建总列大小超过32 K的表,即不允许使用VARCHAR(5000)数据类型创建表。但可以使用CLOB数据类型创建表;但是即使有时数据不在其中,CLOB也会占用大量空间。
extended_row_sz
VARCHAR(5000)
luaexgnf1#
extended_row_sz适用于不想花时间设计数据库以获得最佳性能的懒人。它的目的是启用Oracle兼容性功能:Oracle数据库没有行大小限制,对于行大小超过由页大小确定的限制的表,需要重新编写DDL。启用扩展行大小后,可以按原样运行Oracle DDL语句。然而,在一些情况下,Db2中的行大小限制没有任何作用。启用扩展行大小后,如果表的总声明行宽度超过限制,Db2会将长字符列的数据类型隐式转换为CLOB。这样做时,它不会告诉您,也不会对性能进行任何优化,如果谨慎的DBA要显式设计表以使用CLOB,则可以应用这些优化,其中(需要考虑LOB内联和LOB表空间属性)。因此,为了回答您关于extended_row_sz的利弊的问题:它在数据库设计时节省了一些工作量,但代价是潜在的性能问题,这些问题在将来不太容易诊断,而且无论如何都需要重新设计数据库。
unhi4e5o2#
Extended row size是绕过给定表的行大小限制(它取决于页大小)的能力。简而言之:Db2中的每个表行必须实际驻留在一个页中。LOB(未内联)实际上并不存储在该页中,只有指向它们的指针存储在数据页上。LOB本身存储在表空间内的单独对象中。这种能力是在数据库级别(而不是在表或表空间级别)启用的。
2条答案
按热度按时间luaexgnf1#
extended_row_sz
适用于不想花时间设计数据库以获得最佳性能的懒人。它的目的是启用Oracle兼容性功能:Oracle数据库没有行大小限制,对于行大小超过由页大小确定的限制的表,需要重新编写DDL。启用扩展行大小后,可以按原样运行Oracle DDL语句。然而,在一些情况下,Db2中的行大小限制没有任何作用。启用扩展行大小后,如果表的总声明行宽度超过限制,Db2会将长字符列的数据类型隐式转换为CLOB。这样做时,它不会告诉您,也不会对性能进行任何优化,如果谨慎的DBA要显式设计表以使用CLOB,则可以应用这些优化,其中(需要考虑LOB内联和LOB表空间属性)。
因此,为了回答您关于
extended_row_sz
的利弊的问题:它在数据库设计时节省了一些工作量,但代价是潜在的性能问题,这些问题在将来不太容易诊断,而且无论如何都需要重新设计数据库。unhi4e5o2#
Extended row size是绕过给定表的行大小限制(它取决于页大小)的能力。
简而言之:Db2中的每个表行必须实际驻留在一个页中。LOB(未内联)实际上并不存储在该页中,只有指向它们的指针存储在数据页上。LOB本身存储在表空间内的单独对象中。
这种能力是在数据库级别(而不是在表或表空间级别)启用的。