我有一个与多个系统交互的复杂过程。
这些系统中的每一个都可能产生我想要存储在我的Oracle数据库表中的错误消息(请注意,我有状态但过程的性质可能并不总是预定义错误。)
我们每天都在谈论数十万笔交易,其中1%可能导致各种错误。
1)想知道数据库字段的合理/可接受长度是多少以及我应该存储多大的消息?
2)内存方面,数据库中字段的定义范围真的很重要吗?
答案 0 :(得分:1)
"合理"并且"可以接受"取决于应用程序。假设您要将数据库列定义为VARCHAR2
而不是CLOB
,并假设您没有使用12.1或更高版本,则可以声明该列最多可容纳4000个字节。这对于您需要支持的任何错误消息是否足够?您可以建立的错误消息的长度是否有下限?如果您正在生成旨在向用户显示的错误消息,那么您可能会生成更短的消息。如果您正在生成和存储堆栈跟踪,则可能需要将该列声明为CLOB
,因为4000字节可能不够。
我们在谈论什么样的记忆?在磁盘上,VARCHAR2
将仅分配存储数据实际所需的空间。当块被读入缓冲区缓存时,它也将仅使用存储数据所需的空间。如果您开始在PL / SQL中分配局部变量,则根据字段的大小,Oracle可能会分配比存储该局部变量的特定数据所需的空间更多的空间,以避免增加和缩小分配的成本当你修改字符串。如果将数据返回到客户端应用程序(包括中间层应用程序服务器),则该客户端可能会根据列的最大大小而不是基于数据的实际大小在内存中分配缓冲区。