Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable TCP_NODELAY flag #1751

Merged
merged 1 commit into from
Dec 21, 2022
Merged

Enable TCP_NODELAY flag #1751

merged 1 commit into from
Dec 21, 2022

Conversation

dsech
Copy link

@dsech dsech commented Dec 19, 2022

This fixes the massive slowness I experienced on some machines (Amazon Linux 2 on AWS EC2), where each query was taking ~60ms. Running a script that executes 100 UPDATE queries in sequence takes ~6.5s before patch, and 0.3s after patch.

And somewhat less interestingly.. the setting doesn't make much difference if I execute the script on my local PC. I'm guessing there are settings at the OS level that can amplify this slowness.

I don't know much about the TCP_NODELAY flag, only that it should always be set for time sensitive network communications (like for a MySQL client). And forgetting to set this flag seems to be a common issue, for example this blog post has a nice explanation: https://vorner.github.io/2020/11/06/40-ms-bug.html

@sidorares
Copy link
Owner

small note - the stream can be any duplex Stream instance, so might worth adding a check if setNoDelay method exist on it ( and maybe earlier - same check for setKeepAlive )

@dsech
Copy link
Author

dsech commented Dec 20, 2022

setNoDelay and setKeepAlive are called in the same code block where this.stream is a TCP socket created by Net.socket(port, host), so the methods should always exist here.

But I'm more than happy to make any changes needed to the PR, just let me know.

@sidorares sidorares merged commit 016900f into sidorares:master Dec 21, 2022
@dsech dsech deleted the tcp-nodelay branch December 23, 2022 12:20
daniellockyer added a commit to TryGhost/Ghost that referenced this pull request Jan 12, 2023
fixes #14990

- there was a bug in `mysql2` [1] when connecting to Azure DBs, but this was
  subsequently fixed, so this commit bumps the package in Ghost and
  `knex-migrator`, where this was also bumped
- of note, this release includes sidorares/node-mysql2#1666 and
  sidorares/node-mysql2#1751, which are very interesting

[1]: sidorares/node-mysql2#1438
Vylpes pushed a commit to Vylpes/Droplet that referenced this pull request Sep 14, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [mysql2](https://github.com/sidorares/node-mysql2) | dependencies | major | [`^2.2.5` -> `^3.0.0`](https://renovatebot.com/diffs/npm/mysql2/2.2.5/3.2.4) |

---

### Release Notes

<details>
<summary>sidorares/node-mysql2</summary>

### [`v3.2.4`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;324-httpsgithubcomsidoraresnode-mysql2comparev323v324-2023-04-25)

[Compare Source](sidorares/node-mysql2@v3.2.3...v3.2.4)

##### Bug Fixes

-   **server:** Added missing encoding argument to server-handshake ([#&#8203;1976](sidorares/node-mysql2#1976)) ([a4b6b22](sidorares/node-mysql2@a4b6b22))

### [`v3.2.3`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;323-httpsgithubcomsidoraresnode-mysql2comparev322v323-2023-04-16)

[Compare Source](sidorares/node-mysql2@v3.2.2...v3.2.3)

##### Bug Fixes

-   **types:** add decimalNumbers to createConnection/createPool typings. fixes [#&#8203;1803](sidorares/node-mysql2#1803) ([#&#8203;1817](sidorares/node-mysql2#1817)) ([bb48462](sidorares/node-mysql2@bb48462))

### [`v3.2.2`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;322-httpsgithubcomsidoraresnode-mysql2comparev321v322-2023-04-16)

[Compare Source](sidorares/node-mysql2@v3.2.1...v3.2.2)

##### Bug Fixes

-   `ConnectionOptions` conflict between `mysql` and `mysql/promise` ([#&#8203;1955](sidorares/node-mysql2#1955)) ([eca8bda](sidorares/node-mysql2@eca8bda))

### [`v3.2.1`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;321-httpsgithubcomsidoraresnode-mysql2comparev320v321-2023-04-13)

[Compare Source](sidorares/node-mysql2@v3.2.0...v3.2.1)

##### Bug Fixes

-   Add typings for Connection.promise(). ([#&#8203;1949](sidorares/node-mysql2#1949)) ([e3ca310](sidorares/node-mysql2@e3ca310))
-   PoolConnection redundancy when extending Connection interface in TypeScript ([7c62d11](sidorares/node-mysql2@7c62d11))

### [`v3.2.0`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;320-httpsgithubcomsidoraresnode-mysql2comparev312v320-2023-03-03)

[Compare Source](sidorares/node-mysql2@v3.1.2...v3.2.0)

##### Features

-   maxVersion ssl option to tls.createSecureContext ([0c40ef9](sidorares/node-mysql2@0c40ef9))

### [`v3.1.2`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;312-httpsgithubcomsidoraresnode-mysql2comparev311v312-2023-02-08)

[Compare Source](sidorares/node-mysql2@v3.1.1...v3.1.2)

##### Bug Fixes

-   update `lru-cache` reset method to clear ([114f266](sidorares/node-mysql2@114f266))

### [`v3.1.1`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;311-httpsgithubcomsidoraresnode-mysql2comparev310v311-2023-02-07)

[Compare Source](sidorares/node-mysql2@v3.1.0...v3.1.1)

##### Bug Fixes

-   remove accidental log in caching_sha2\_password.js ([c1202b6](sidorares/node-mysql2@c1202b6))

### [`v3.1.0`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;310-httpsgithubcomsidoraresnode-mysql2comparev301v310-2023-01-30)

[Compare Source](sidorares/node-mysql2@v3.0.1...v3.1.0)

##### Features

-   cleanup buffer/string conversions in hashing/xor helpers that were failing in Bun ([a2392e2](sidorares/node-mysql2@a2392e2))

##### Bug Fixes

-   when port is pased as a string convert it to a number (Bun's net.connect does not automatically convert this) ([703ecb2](sidorares/node-mysql2@703ecb2))

### [`v3.0.1`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;301-httpsgithubcomsidoraresnode-mysql2comparev300v301-2023-01-13)

[Compare Source](sidorares/node-mysql2@v3.0.0...v3.0.1)

##### Miscellaneous Chores

-   release 3.0.1 ([d5a6b2c](sidorares/node-mysql2@d5a6b2c))

### [`v3.0.0`](https://github.com/sidorares/node-mysql2/blob/HEAD/Changelog.md#&#8203;300-httpsgithubcomsidoraresnode-mysql2comparev300-rc1v300-2023-01-12)

[Compare Source](sidorares/node-mysql2@v2.3.3...v3.0.0)

-   named-placeholders library is updated to use newer `lru-cache` dependency, allowing it do dedupe and be shared between mysql2 and named-placeholders - sidorares/node-mysql2#1711, mysqljs/named-placeholders#19
-   `chai` and `mocha` moved to devDependencies [#&#8203;1774](sidorares/node-mysql2#1774)
-   Amazon RDS ssl certificates updated including AWS China [#&#8203;1754](sidorares/node-mysql2#1754)
-   `TCP_NODELAY` flag enabled, avoiding long connect timeout in some scenarios [#&#8203;1751](sidorares/node-mysql2#1751)
-   typing improvements: [#&#8203;1675](sidorares/node-mysql2#1675), [#&#8203;1674](sidorares/node-mysql2#1674)
-   fix:  ensure pooled connections get released [#&#8203;1666](sidorares/node-mysql2#1666)

##### Miscellaneous Chores

-   release 3.0.0 ([11692b2](sidorares/node-mysql2@11692b2))

### [`v2.3.3`](sidorares/node-mysql2@v2.3.2...v2.3.3)

[Compare Source](sidorares/node-mysql2@v2.3.2...v2.3.3)

### [`v2.3.2`](sidorares/node-mysql2@v2.3.1...v2.3.2)

[Compare Source](sidorares/node-mysql2@v2.3.1...v2.3.2)

### [`v2.3.1`](sidorares/node-mysql2@v2.3.0...v2.3.1)

[Compare Source](sidorares/node-mysql2@v2.3.0...v2.3.1)

### [`v2.3.0`](sidorares/node-mysql2@v2.2.5...v2.3.0)

[Compare Source](sidorares/node-mysql2@v2.2.5...v2.3.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC43NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNzQuMiJ9-->

Co-authored-by: Renovate Bot <[email protected]>
Reviewed-on: https://gitea.vylpes.xyz/RabbitLabs/Droplet/pulls/128
Reviewed-by: Vylpes <[email protected]>
Co-authored-by: RenovateBot <[email protected]>
Co-committed-by: RenovateBot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants