The Accounts Payable group ran ~9.5 min, 83% of it in four full reloads. The cost is the GPSERVER linked-server hop, not row volume (pm30200 managed only ~590 rows/sec), so cutting rows crossing the link is the whole win. Predicates go inside OPENQUERY to push down to the remote — a 4-part name would drag the table across before filtering. pm30200 own DEX_ROW_TS pm30600 changed set: parent PM30200 pm30300 changed set: PM30200 union PM20000 All three key on (vchrnmbr, doctype), verified exactly unique in PM30200 at 108,803/108,803. Watermark resolves off gp.pm30200 with a 7-day lookback, so run order within the group must stay pm30200 first and the lookback must exceed the sync interval. The two-parent union on pm30300 is load-bearing: 38 rows have a parent only in the open table, and a PM30200-only join would strand them permanently. pm30600 needs no union (0 orphans, verified). pm30700 stays full — 213 of its rows have no parent in either table, so no changed-set join can reach them, and it only costs 13s. pm20100 and pm00400 stay full because open and index tables delete rows, which a delete-by-key incremental structurally cannot propagate (cf. icstt). 391s -> 15s. reconcile.py --super-quick reports IN SYNC for all three. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
84 lines
2.3 KiB
SQL
84 lines
2.3 KiB
SQL
SELECT * FROM OPENQUERY(GPSERVER, '
|
|
SELECT
|
|
RTRIM([VCHRNMBR]) AS vchrnmbr,
|
|
RTRIM([VENDORID]) AS vendorid,
|
|
[DOCTYPE] AS doctype,
|
|
[DOCDATE] AS docdate,
|
|
RTRIM([DOCNUMBR]) AS docnumbr,
|
|
[DOCAMNT] AS docamnt,
|
|
[CURTRXAM] AS curtrxam,
|
|
[DISTKNAM] AS distknam,
|
|
[DISCAMNT] AS discamnt,
|
|
[DSCDLRAM] AS dscdlram,
|
|
RTRIM([BACHNUMB]) AS bachnumb,
|
|
RTRIM([TRXSORCE]) AS trxsorce,
|
|
RTRIM([BCHSOURC]) AS bchsourc,
|
|
[DISCDATE] AS discdate,
|
|
[DUEDATE] AS duedate,
|
|
RTRIM([PORDNMBR]) AS pordnmbr,
|
|
[TEN99AMNT] AS ten99amnt,
|
|
[WROFAMNT] AS wrofamnt,
|
|
[DISAMTAV] AS disamtav,
|
|
RTRIM([TRXDSCRN]) AS trxdscrn,
|
|
[UN1099AM] AS un1099am,
|
|
[BKTPURAM] AS bktpuram,
|
|
[BKTFRTAM] AS bktfrtam,
|
|
[BKTMSCAM] AS bktmscam,
|
|
[VOIDED] AS voided,
|
|
[HOLD] AS hold,
|
|
RTRIM([CHEKBKID]) AS chekbkid,
|
|
[DINVPDOF] AS dinvpdof,
|
|
[PPSAMDED] AS ppsamded,
|
|
[PPSTAXRT] AS ppstaxrt,
|
|
[PGRAMSBJ] AS pgramsbj,
|
|
[GSTDSAMT] AS gstdsamt,
|
|
[POSTEDDT] AS posteddt,
|
|
RTRIM([PTDUSRID]) AS ptdusrid,
|
|
[MODIFDT] AS modifdt,
|
|
RTRIM([MDFUSRID]) AS mdfusrid,
|
|
[PYENTTYP] AS pyenttyp,
|
|
RTRIM([CARDNAME]) AS cardname,
|
|
[PRCHAMNT] AS prchamnt,
|
|
[TRDISAMT] AS trdisamt,
|
|
[MSCCHAMT] AS mscchamt,
|
|
[FRTAMNT] AS frtamnt,
|
|
[TAXAMNT] AS taxamnt,
|
|
[TTLPYMTS] AS ttlpymts,
|
|
RTRIM([CURNCYID]) AS curncyid,
|
|
RTRIM([PYMTRMID]) AS pymtrmid,
|
|
RTRIM([SHIPMTHD]) AS shipmthd,
|
|
RTRIM([TAXSCHID]) AS taxschid,
|
|
RTRIM([PCHSCHID]) AS pchschid,
|
|
RTRIM([FRTSCHID]) AS frtschid,
|
|
RTRIM([MSCSCHID]) AS mscschid,
|
|
[PSTGDATE] AS pstgdate,
|
|
[DISAVTKN] AS disavtkn,
|
|
[CNTRLTYP] AS cntrltyp,
|
|
[NOTEINDX] AS noteindx,
|
|
[PRCTDISC] AS prctdisc,
|
|
[RETNAGAM] AS retnagam,
|
|
[VOIDPDATE] AS voidpdate,
|
|
[ICTRX] AS ictrx,
|
|
[Tax_Date] AS tax_date,
|
|
[PRCHDATE] AS prchdate,
|
|
[CORRCTN] AS corrctn,
|
|
[SIMPLIFD] AS simplifd,
|
|
[APLYWITH] AS aplywith,
|
|
[Electronic] AS electronic,
|
|
[ECTRX] AS ectrx,
|
|
[DocPrinted] AS docprinted,
|
|
[TaxInvReqd] AS taxinvreqd,
|
|
RTRIM([VNDCHKNM]) AS vndchknm,
|
|
[BackoutTradeDisc] AS backouttradedisc,
|
|
[CBVAT] AS cbvat,
|
|
RTRIM([VADCDTRO]) AS vadcdtro,
|
|
[TEN99TYPE] AS ten99type,
|
|
[TEN99BOXNUMBER] AS ten99boxnumber,
|
|
RTRIM([PONUMBER]) AS ponumber,
|
|
[Workflow_Status] AS workflow_status,
|
|
[DEX_ROW_TS] AS dex_row_ts,
|
|
[DEX_ROW_ID] AS dex_row_id
|
|
FROM CHG.dbo.PM30200
|
|
WHERE [DEX_ROW_TS] > ''{pm30200_ts}''
|
|
')
|