【发布时间】:2018-03-17 19:18:29
【问题描述】:
所以我想知道如果一个表处于编辑模式(比如在 SQL 中),它不能被其他用户访问或更改。但是,我们如何在 Tableau 中看到实时可视化?为什么我们看到图表却在后端实时更新。从技术上讲,它无法更改或访问。 我想了解数据是如何实时更新的,同时我们使用这些表格来查看动态图表。
我尝试通过这个搜索互联网,最接近 HSQL,但我无法理解。
【问题讨论】:
标签: sql sql-server tableau-api
所以我想知道如果一个表处于编辑模式(比如在 SQL 中),它不能被其他用户访问或更改。但是,我们如何在 Tableau 中看到实时可视化?为什么我们看到图表却在后端实时更新。从技术上讲,它无法更改或访问。 我想了解数据是如何实时更新的,同时我们使用这些表格来查看动态图表。
我尝试通过这个搜索互联网,最接近 HSQL,但我无法理解。
【问题讨论】:
标签: sql sql-server tableau-api
SQL Server 提供事务隔离级别以提供读取一致性。根据会话事务隔离级别和数据库配置,这些可能使用锁定或行版本控制。
默认事务隔离级别是READ_COMMITTED,使用锁定实现。在这种情况下,用于 Tableau 可视化的只读查询将很乐意选择数据,除非当前正在更新请求的行。然后查询将等待事务提交,然后继续返回最新数据。根据工作负载,这样的阻塞持续时间可能非常短,以至于对应用程序是透明的。但在大批量更新的情况下,阻塞持续时间可能很长。请注意,SQL Server 将尽可能使用粒度锁,而不是锁定整个表。
DBA 可以通过打开数据库READ_COMMITTED_SNAPSHOT 数据库选项来更改此行为。这会导致READ_COMMITTED 隔离级别使用行版本控制而不是锁定来提供读取一致性。启用此选项后,Tableau 查询将接收更新数据的前图像,而不是被正在进行的事务阻止。行版本控制有一些额外的开销,因此 DBA 不会不加选择地打开 READ_COMMITTED_SNAPSHOT 数据库选项。启用该选项会提高并发性,但会以资源使用为代价。
【讨论】:
我想知道你问的是否与你所问的相反:)
数据库将数据视为唯一的休战协议,它们将对这些数据执行您的命令。 当您在屏幕上看到数据时,数据并未锁定。 当您呈现数据时,例如在应用程序中,甚至在 Management Studio(用于 SQL 服务器)中,它们会在特定时间查询数据库并将其显示给您,当您更改某些内容时,它们会向服务器发送更新命令。数据未锁定。
DB 对表有一个锁定过程,当您有一个耗时的命令并且您不希望任何进程在其中一些处于无效状态时读取数据时,该过程通常可以工作。假设您正在进行更新,将 col1 增加 1。现在在更新过程中,如果有人查询数据并且 SQL 返回数据,其中一些将是更新后的值,而另一些则不是,这通常不是您想要的。
但是,SQL 中有一种称为“单用户模式”的模式,它会禁用来自所有其他用户的所有连接,并且不允许他们连接,让 DBA 来处理 DB(通常当您有较大的 DB 更改时) )。
【讨论】: