我已经查找过这个问题,但找不到任何足够的信息。
Google Cloud Spanner 客户端库会自动处理 session ,每个 Node 的限制为 10.000 个 session ,到此为止都没有问题。
我有一个微服务应用程序,它也具有 Google Cloud Functions。我正在云函数上执行一些特定的数据库作业,并且我还不断调用这些函数。过了一会儿,Cloud Spanner 开始抛出错误;
Too many active sessions in database, limit is 10000. Increase the node count to allow more sessions.
我知道这些限制,但没有任何操作会导致我的应用超出这些限制。
注意到这一点后,我有两个问题找不到任何答案;
1- Cloud Functions 是否为每个调用创建新 session ? (我正在使用 HTTP 触发器)
这是我到目前为止所做的;
1- 这是我的云函数声明示例;
exports.myFunction = function myFunction(req, res) {}
在意识到这个问题之前,我已声明我的数据库实例超出此范围;
const db = Spanner({projectId: '[my-project]'}).instance('[my-cs-instance]').database('[my-database]');
exports.myFunction = function myFunction(req, res) {}
在这个问题之后,我把它放在这样的范围内,并在完成后关闭数据库 session ;
exports.myFunction = function myFunction(req, res) {
const db = Spanner({projectId: '[my-project]'}).instance('[my-cs-instance]').database('[my-database]');
// codes
db.close();
}
这并没有改变任何事情,一段时间后它仍然超出了 session 限制。
您有什么经验导致这种情况吗?这与 Cloud Functions 或 Cloud Spanner 本身有关吗?
2- 如果每个事务对象一次使用一个连接,在这种情况下会发生什么。
除了这些 Cloud Functions 之外,我还有一个 REST 端点。它在开始监听 HTTP 端点时创建一个数据库实例,并且我不再在其生命周期中创建任何其他实例。在该端点,我正在创建 CRUD,并且正在使用事务,它们都使用我在流程开始时创建的相同实例。我的经验是;
- 有时,事务或其他 CRUD 操作会出现一点延迟,但这种情况并不总是发生。
我的问题是;
- 这是因为当事务开始工作时,它是否会锁定连接并且所有其他操作都应该等到它结束?如果是这样,我应该为该端点上的事务创建独立的数据库实例吗?
提前致谢
最佳答案
此问题现已根据 #89 中打开的问题得到修复。并修复 #91 ,并记录为 #71987137在Google Issue Trackers .
如果仍有任何问题,请报告 Google issue tracker他们将重新开放进行检查。
关于javascript - Cloud Spanner 无法正确管理 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239730/