Merge pull request 'fix: 云库新增慢查询入口 querySlow(池级超时放宽)' (#65) from codex/cloud-db-slow-query-1014 into main
This commit is contained in:
commit
e5030d4864
@ -764,7 +764,20 @@ async function connectWithCandidate(candidate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function queryWithCandidateConnection(candidate, sqlText, params = {}, options = {}) {
|
async function queryWithCandidateConnection(candidate, sqlText, params = {}, options = {}) {
|
||||||
const nextPool = new sql.ConnectionPool(candidate.mssqlConfig);
|
// request.timeout(请求级)在 mssql 12.x 上实测不生效(始终按池配置的默认值掐断),
|
||||||
|
// 慢查询必须通过「池配置级 requestTimeout」放宽,这里允许调用方覆盖候选连接的池级超时。
|
||||||
|
let mssqlConfig = candidate.mssqlConfig;
|
||||||
|
const poolRequestTimeout = parsePositiveInt(options.connectRequestTimeoutMs, 0);
|
||||||
|
if (poolRequestTimeout > 0) {
|
||||||
|
mssqlConfig = {
|
||||||
|
...candidate.mssqlConfig,
|
||||||
|
options: {
|
||||||
|
...candidate.mssqlConfig.options,
|
||||||
|
requestTimeout: poolRequestTimeout,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const nextPool = new sql.ConnectionPool(mssqlConfig);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await nextPool.connect();
|
await nextPool.connect();
|
||||||
@ -1093,6 +1106,28 @@ const queryWithFreshConnection = async (sqlText, params = {}, options = {}) => {
|
|||||||
return [];
|
return [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 慢查询专用入口:走独立临时连接,池级 requestTimeout 放宽到 SLOW_QUERY_POOL_TIMEOUT_MS。
|
||||||
|
* 背景:mssql 12.x 的 request.timeout(请求级)不生效,超过池默认 60s 的查询必须用
|
||||||
|
* 池配置级 requestTimeout 才能放宽。适用场景:动销分析这类多表大窗口聚合。
|
||||||
|
*/
|
||||||
|
const SLOW_QUERY_POOL_TIMEOUT_MS = parsePositiveInt(
|
||||||
|
process.env.CLOUD_DB_SLOW_QUERY_TIMEOUT_MS,
|
||||||
|
300000
|
||||||
|
);
|
||||||
|
|
||||||
|
const querySlow = async (sqlText, params = {}, options = {}) => {
|
||||||
|
const poolRequestTimeout = parsePositiveInt(
|
||||||
|
options.connectRequestTimeoutMs,
|
||||||
|
SLOW_QUERY_POOL_TIMEOUT_MS
|
||||||
|
);
|
||||||
|
return queryWithFreshConnection(sqlText, params, {
|
||||||
|
...options,
|
||||||
|
connectRequestTimeoutMs: poolRequestTimeout,
|
||||||
|
requestTimeout: poolRequestTimeout,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试连接
|
* 测试连接
|
||||||
*/
|
*/
|
||||||
@ -1143,6 +1178,7 @@ const reload = async () => {
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
getPool,
|
getPool,
|
||||||
query,
|
query,
|
||||||
|
querySlow,
|
||||||
queryWithFreshConnection,
|
queryWithFreshConnection,
|
||||||
createPinnedQueryClient,
|
createPinnedQueryClient,
|
||||||
test,
|
test,
|
||||||
|
|||||||
@ -198,7 +198,10 @@ async function fetchPickingBinSkuRows(cloudDb, wmsCoIds, options = {}) {
|
|||||||
HAVING ABS(SUM(CAST(b.binSkuQty AS DECIMAL(18, 2)))) > 0.0001
|
HAVING ABS(SUM(CAST(b.binSkuQty AS DECIMAL(18, 2)))) > 0.0001
|
||||||
ORDER BY b.wmsCoId, b.binType, b.binName, b.skuId`;
|
ORDER BY b.wmsCoId, b.binType, b.binName, b.skuId`;
|
||||||
|
|
||||||
const rows = await cloudDb.query(
|
// 该查询 union 了 4 个销量来源(含 qmcust 全渠道扫描),全仓窗口可能超过默认 60s;
|
||||||
|
// mssql 12.x 请求级 timeout 不生效,必须走池级放宽的慢查询入口。
|
||||||
|
const runQuery = typeof cloudDb.querySlow === 'function' ? cloudDb.querySlow : cloudDb.query;
|
||||||
|
const rows = await runQuery(
|
||||||
sqlText,
|
sqlText,
|
||||||
{
|
{
|
||||||
...binIn.params,
|
...binIn.params,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user