【问题标题】:Sail.js multiple connections on startSail.js 启动时有多个连接
【发布时间】:2014-05-22 17:34:54
【问题描述】:

我遇到了一个奇怪的问题 - 在我的sails 应用程序启动时(它与 postgres 连接并部署在 heroku 上)有多个连接(大约 10 个)到数据库,并且由于它是免费帐户,如果我再尝试在 localhost 上启动应用程序以测试一些新代码我收到错误“一个角色的连接太多”。那么有谁知道为什么有这么多与数据库的连接,我可以更改它,使每个应用程序只有一个连接吗?

编辑: 创建与 Postgresql 的连接时出错:错误:角色连接过多 “xwoellnkvjcupt” 创建与 Postgresql 的连接时出错:错误:角色连接过多 “xwoellnkvjcupt” 错误:钩子加载失败:orm(错误:角色“xwoellnkv”的连接太多 壶") 错误:加载 Sails 核心时遇到错误! 错误:错误:角色“xwoellnkvjcupt”的连接太多 在 Connection.parseE (C:\Studia\szachman2\node_modules\sails-postgresql\node _modules\pg\lib\connection.js:561:11) 在 Connection.parseMessage (C:\Studia\szachman2\node_modules\sails-postgresq l\node_modules\pg\lib\connection.js:390:17) 在空。 (C:\Studia\szachman2\node_modules\sails-postgresql\node_ 模块\pg\lib\connection.js:98:18) 在 CleartextStream.EventEmitter.emit (events.js:95:17) 在 CleartextStream。 (_stream_readable.js:746:14) 在 CleartextStream.EventEmitter.emit (events.js:92:17) 在 emitReadable_ (_stream_readable.js:408:10) 在 _stream_readable.js:401:7 在 process._tickDomainCallback (node.js:459:13)

这是我在尝试在 localhost 上测试一些新代码时经常遇到的错误。

【问题讨论】:

    标签: postgresql heroku sails.js waterline


    【解决方案1】:

    @jantar @sgress454 我just addedsails-postgresql 中的故障排除消息尝试改进。它是这样说的:

    -> 也许你的poolSize 配置设置得太高了? 例如如果您的 Postgresql 数据库仅支持 20 个并发连接,则应确保将 poolSize 设置为 poolSize 为 10。

    要覆盖默认的 poolSize,请在相关的 Postgresql“连接”配置对象上指定 poolSize 属性。如果您使用的是 Sails,它通常位于 config/connections.js,或设置特定环境的数据库配置的任何位置。

    -> 您是否有多个 Sails 实例共享同一个 Postgresql 数据库? 每个 Sails 实例最多可以使用配置的 poolSize # 个连接。假设所有 Sails 实例只是彼此的副本(一种合理的最佳实践),我们可以通过将配置的 poolSize (P) 乘以 Sails 实例的数量 (N) 来计算实际使用的 Postgresql 连接数 (C) .如果实际连接数 (C) 超过了与您的 Postgresql 数据库 (V) 的 AVAILABLE 连接总数,那么您就有问题了。如果这适用于您,请尝试减少您的 poolSize 配置。合理的poolSize 设置为 V/N。

    【讨论】:

    • 我现在已经达到了我的风帆冒险的同一阶段。我的服务器应该接受 200 个连接。我之前已经能够连接到sails-postgres 适配器,但现在已经达到了连接限制。我重新启动服务器,清除了所有连接,但sails-postgresql 不再连接到服务器。 :(
    • 我找不到poolSize 选项,这里的解决方案是否可能适用于sails v1? stackoverflow.com/a/54968280/1828637我要加max键?
    【解决方案2】:

    这是由于 Sails 的 自动迁移 功能试图让您的模型和数据库保持同步。它不打算在生产中使用。您可以通过在模型定义中添加 migrate: safe 来关闭单个模型的自动迁移:

    module.exports = {
        migrate: 'safe',
        attributes: {...}
    }
    

    您可以通过添加model 配置(通常在您的config/locals.js 中)为所有 模型关闭自动迁移:

    module.exports = {
    
        model: {
            migrate: 'safe'
        },
        environment: 'production',
        ...other local config...
    }
    

    【讨论】:

    • 它仍然创建了 11 个连接,这次是这样的查询:| SELECT n.nspname 作为“Schema”,c.relname 作为“Name”,CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END 作为“类型”,pg_catalog.pg_get_userbyid(c.relowner) 作为“所有者”,c2.relname 作为 pg_catalog 中的“表”。 pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid LEFT JOIN pg_cata
    • 嗯,这些查询是 Waterline 注册模型的一部分。但它不应该崩溃任何东西。我在一个免费的 Heroku 帐户上并排运行一个应用程序的两个实例,没有任何问题。你能用你得到的日志输出更新你的问题吗?
    • 它不会崩溃,只是不允许创建更多连接,因此下一个实例无法正常启动。我得到的另一个问题是,是为每个查询创建一个数据库连接,还是为每个应用程序创建一个数据库连接?因为如果对于每个查询,那么我猜这个 heroku free db 不会为我们的应用程序做,因为它是一个国际象棋服务器,所以很难同时玩几场比赛。哦,下次它碰巧在这里显示时,我会得到输出日志。
    【解决方案3】:

    V1 的小更新。如果您想为连接池设置最大大小,您在 config/datastore.js 中的适配器应该如下所示:

    {
      adapter: 'sails-postgresql',
      url: 'yourconnectionurl',
      max: 1 // This is the important part for poolSize, I set 1 because I don't want more than 1 connection ^^
    }
    

    如果您想知道所有可以设置的信息,请看这里:https://github.com/sailshq/machinepack-postgresql/blob/176413efeab90dc5099dc60718e8b520942ce3be/machines/create-manager.js,第 162 行:

    // Basic:
            'host', 'port', 'database', 'user', 'password', 'ssl',
    
            // Advanced Client Config:
            'application_name', 'fallback_application_name',
    
            // General Pool Config:
            'max', 'min', 'refreshIdle', 'idleTimeoutMillis',
    
            // Advanced Pool Config:
            // These should only be used if you know what you are doing.
            // https://github.com/coopernurse/node-pool#documentation
            'name', 'create', 'destroy', 'reapIntervalMillis', 'returnToHead',
            'priorityRange', 'validate', 'validateAsync', 'log'
    

    【讨论】:

    • 感谢分享!我找不到它在哪里改变 poolSize。我到处找。正如您所指出的,它似乎是max
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多