transactions - Sybase 锁定策略

标签 transactions locking sap-ase

Adaptive Server 提供以下锁定方案:

  • Allpages 锁定,锁定数据页和索引页
  • 数据页锁定,只锁定数据页
  • 数据行锁定,仅锁定数据行

  • 我的问题是,锁的数量是否取决于锁定策略。有人说,许多锁是应用程序实现不良或类似情况的标志。我的意思是数据行策略需要比数据页更多的锁,因为数据页在一个锁下覆盖了许多行。我不完全确定我的假设。

    我目前有 20 万,但这还不够。

    最近将表上的锁定策略更改为数据行以提高性能,从那时起我一直在增加锁定。

    Sybase 文档说该范围在 1000–2147483647 之间。

    为什么不把它设置为 2147483647?

    最佳答案

    当有许多进程访问数据库时,数据页和数据行锁定会更好,并且有相当多的 WRITE/UPDATE 操作需要排他锁。使用 All-Pages 锁定,一个操作锁定更多页面(比受写操作影响的页面更多),因此可以阻止想要访问不受写操作影响的数据的进程。

    但是,如果该表具有数据页或数据行锁定,则相同的写入过程将仅锁定受影响的数据,从而锁定较少量的数据,从而提供更好的并发性。但是这个写进程持有的锁数更多,因此需要更多的内存。

    例如,一个页面有 10 行,写入过程影响 5 行。如果进程锁定页面,它只需要一个锁并阻止任何想要读取其余五行中的任何一行的进程。

    如果该表具有数据行锁定,则写入进程将使用五个锁(这意味着更多的内存)并将剩余的五行留在页面上以供任何其他进程读/写

    关于transactions - Sybase 锁定策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498271/

    相关文章:

    transactions - 在 Firebird (2.1) 中查询 RDB$TRANSACTIONS 表

    sql - 从事务中的 SQL 批处理中止错误中恢复?选择?

    java - 通过 ID 获取 Spring 事务并检查状态

    java - ReentrantReadWriteLock 丢失——抛出 IllegalMonitorStateException

    python - 从 Python 打开 Sybase-ASE 连接时出现字符集转换问题

    t-sql - sybase - 除非字符串是硬编码的,否则无法使用索引

    mysql - 重复键错误不会取消/回滚 mysql 事务

    c++ - 如何在 C++ 中使用/创建 unique_lock?

    c++ - 如何使用任意字符串作为 C++ 中的锁?

    sql - 从 View 中选择数据与同名表