问题描述
与启动读写事务相比,启动只读事务是否会造成性能损失?如果是,则惩罚是什么( I/O、CPU ) ?
我之所以问这个问题,是因为我们正在将数据库从Oracle Rdb转换为Oracle Database ,在Rdb中,启动读写入事务几乎是瞬间的,而启动只读只需要很短的时间。原因是在Rdb中,启动读写入事务只需要几个CPU周期,而启动只读事务需要写入磁盘,这至少需要几毫秒。
正因为如此,我们在很多年前发现,对于执行大量的只读事务的代码,我们可以通过执行读写入事务而不是只读(即使不执行任何写入操作)来实现显着的性能改进。我们知道这样做会放弃读取一致性,但这也没关系,因为这些事务通常只是启动一个事务,读取一个记录,然后提交。
因此,问题是,假设您不关心读一致性,那么是否也需要在Oracle数据库中使用读写入事务来执行只读操作?
我之所以问这个问题,是因为我们正在将数据库从Oracle Rdb转换为Oracle Database ,在Rdb中,启动读写入事务几乎是瞬间的,而启动只读只需要很短的时间。原因是在Rdb中,启动读写入事务只需要几个CPU周期,而启动只读事务需要写入磁盘,这至少需要几毫秒。
正因为如此,我们在很多年前发现,对于执行大量的只读事务的代码,我们可以通过执行读写入事务而不是只读(即使不执行任何写入操作)来实现显着的性能改进。我们知道这样做会放弃读取一致性,但这也没关系,因为这些事务通常只是启动一个事务,读取一个记录,然后提交。
因此,问题是,假设您不关心读一致性,那么是否也需要在Oracle数据库中使用读写入事务来执行只读操作?
专家解答
我不知道对于只读操作,除了发出“设置事务只读”的成本之外,它可能涉及(例如)网络跳闸等。
我认为绝大多数Oracle数据库客户只需运行他们的语句,让数据库处理所有事务和读取一致性语义,即,查询只是作为查询运行,以及插入/更新/删除启动事务。
这并不是说没有只读数据的位置(它可以有助于减少备份时间等)。
希望这个能帮上忙。
我认为绝大多数Oracle数据库客户只需运行他们的语句,让数据库处理所有事务和读取一致性语义,即,查询只是作为查询运行,以及插入/更新/删除启动事务。
这并不是说没有只读数据的位置(它可以有助于减少备份时间等)。
希望这个能帮上忙。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




