我已经查找了这个问题,但找不到有关它的足够信息 .
Google Cloud Spanner客户端库自动处理会话,每个节点的限制为10.000个会话,此处没问题 .
我有一个微服务应用程序,它也有谷歌 Cloud 功能 . 我正在 Cloud 功能上做一些特定的数据库工作,我也在不断地调用这些功能 . 过了一会儿,Cloud Spanner开始出错了;
Too many active sessions in database, limit is 10000. Increase the node count to allow more sessions.
我知道限制,但没有任何操作会导致我的应用程序超出这些限制 .
在我注意到这一点后,我有两个问题,我找不到任何答案;
1- Does Cloud Functions creates new session for every call? (I am using HTTP Trigger)
这是我到目前为止所做的事情;
1-这是我的示例 Cloud 函数声明;
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) {}
在这个问题之后,我把它放在这样的范围内,并在我完成后关闭数据库会话;
exports.myFunction = function myFunction(req, res) {
const db = Spanner({projectId: '[my-project]'}).instance('[my-cs-instance]').database('[my-database]');
// codes
db.close();
}
这没有改变任何东西,一段时间后它仍然超过会话限制 .
你有什么经验导致这种情况吗?这与 Cloud 功能或 Cloud 扳手本身有关吗?
2- If every transaction object use one connection at a time, what happens in this scenario.
除了这些 Cloud 功能之外,我还有一个REST endpoints . 它在开始监听HTTP endpoints 时创建一个数据库实例,而我不再在其生命周期中创建任何其他实例 . 在那个 endpoints ,我正在制作CRUD,我正在使用事务,它们都使用我在进程开始时创建的相同实例 . 我的经验是;
- 有时事务或其他CRUD操作会有一点延迟,但不会一直发生 .
我的问题是;
- 这是因为当事务开始工作时,是否会锁定连接,所有其他操作应该等到它结束?如果是这样,我应该为该 endpoints 上的事务创建独立的数据库实例吗?
提前致谢
1 回答
现在已根据#89处打开的问题和#91处的修复程序修复此问题,并在Google Issue Trackers处记录为#71987137 .
如果任何问题仍然存在,请在Google issue tracker报告,他们将重新审核 .