【问题标题】:Sails doesnt populate on large queriesSails 不会填充大型查询
【发布时间】:2016-05-19 17:47:16
【问题描述】:

我正在使用一个遗留 mysql 数据库,其中包含 5 个表,其中 2 个是连接/连接表。我在控制器中有一个方法,可以查询其中一个表并通过连接表填充一些字段。这适用于少于 1632 个项目的查询,但对于填充字段数组以上的任何内容都不包含任何数据。没有错误被抛出,字段只是空白,例如"user": []。将 SQL 查询记录到 MySQL 容器中表明,对于大于 1632 的项目,处理人口(inner_joins 等)的第二个查询没有进来。

以前有没有其他人经历过这种情况?我已经在位于节点 v4.2.6 之上的sails 0.12.0 & 0.11.4 和sails-mysql 0.11.4 & 0.11.1 上对此进行了测试。我在 docker 容器中运行 api 和数据库,并测试了向 docker 主机配置更多 RAM 无济于事。

【问题讨论】:

  • 为了清楚起见,Waterline 仅在不同数据库之间执行填充时才加入 RAM。否则,它会在适配器级别使用优化方法,使用连接生成本机查询,或者在无法连接时回退到 UNION 查询。

标签: mysql node.js docker sails.js waterline


【解决方案1】:

我的特殊问题归结为 MySQL thread_stack 的大小太小。

我的调试路径是通过在sails-mysql 中的节点mysql 模块中的Connection.prototype.query 函数中添加console.log 来查看进入节点mysql 模块的水线查询。然后我获取了查询水线并直接在数据库中运行它产生了一个错误ERROR 1436 (HY000): Thread stack overrun: 246168 bytes used of a 262144 byte stack, and 16000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.

非常感谢 SailsJS 的人帮助我解决这个问题。具体讨论可以在https://github.com/balderdashy/sails/issues/3561

找到

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多