We’re experiencing severe performance issues with our payroll batch processing in JD Edwards 9.2.0. What used to take 45 minutes now runs for 3+ hours during our bi-weekly payroll cycle.
Batch job logs show multiple long-running SQL queries against employee master tables, some taking 15-20 minutes each. We haven’t made any recent hardware upgrades, still running on the same infrastructure from 2 years ago. The strange part is that other HR functions like benefits updates and time entry also lag significantly during the payroll run window.
Our payroll team is frustrated with the delays, and we’re worried about missing payment deadlines. Has anyone dealt with similar slowdowns in HR batch processing? We need to identify whether this is a database tuning issue, resource contention, or something else entirely.
Both statistics and indexes matter here. After updating stats, review your index strategy on F0618 and F060116. For payroll processing, you typically need composite indexes on date ranges and employee status fields. Also check if your payroll UBEs are set to run sequentially when they could run parallel. In 9.2.0, you can configure parallel processing for independent payroll components like tax calculations and deduction processing.
Don’t overlook the connection pool configuration. With batch processing taking 3+ hours, you’re likely exhausting database connections. Check your jde.ini settings for maxPoolSize and ensure it’s adequate for concurrent payroll operations. I’ve seen cases where increasing from default 50 to 100-150 connections resolved similar bottlenecks, especially when multiple UBEs run simultaneously.
Thanks for the suggestions. I checked and our statistics were last updated 18 months ago - definitely stale. I’m running the stats update now. Regarding the execution plans, I see several queries doing full table scans on F0618 (Payroll History). Should I be looking at adding indexes, or is this more about the statistics?
One more thing to investigate - check your temp tablespace allocation during payroll runs. Long-running SQL queries with sorts and joins can fill up temp space quickly, causing spillover to disk and massive slowdowns. Monitor temp tablespace usage during your next payroll cycle. If it’s consistently above 80%, you need to expand it or optimize queries to reduce temp space requirements.
I’ve seen this pattern before. The fact that other HR functions lag during payroll suggests resource contention rather than just query optimization. Your batch jobs are probably competing for database connections and memory. Check your UBE queue settings and consider splitting payroll processing into smaller batches. Also monitor your database connection pool - if it’s maxed out, everything queues up waiting for available connections.
Let me provide a comprehensive solution addressing all the issues identified:
DATABASE STATISTICS & QUERY OPTIMIZATION:
First, update statistics on all payroll-related tables immediately. Focus on F060116 (Employee Master), F0618 (Payroll History), F06146 (Payroll Transactions), and F0709 (Tax History). Set up automated statistics gathering weekly during off-peak hours to prevent this from recurring.
For the long-running SQL queries you’re seeing in batch logs, analyze the execution plans. The full table scans on F0618 indicate missing or unused indexes. Create composite indexes on commonly filtered columns:
- F0618: (Business Unit, Pay Period End Date, Employee Number)
- F060116: (Employee Status, Pay Group, Last Update Date)
These indexes will dramatically reduce query execution time from 15-20 minutes to under 2 minutes for typical payroll queries.
RESOURCE CONTENTION & BATCH CONFIGURATION:
The fact that other HR functions lag during payroll runs confirms resource contention. Your batch processing is monopolizing database connections and server resources. Implement these changes:
-
Connection Pool Tuning: Increase maxPoolSize in jde.ini from default 50 to 120-150 connections. This allows concurrent payroll UBEs and interactive HR functions to coexist without queuing.
-
Batch Queue Optimization: Configure separate UBE queues for payroll processing. Create a dedicated high-priority queue for time-sensitive payroll jobs and a lower-priority queue for reports. This prevents report generation from blocking critical payroll calculations.
-
Parallel Processing: Break your monolithic payroll batch into parallel streams. Process different pay groups or departments concurrently rather than sequentially. JDE 9.2.0 supports this through batch application design - you can run up to 4-6 parallel payroll streams depending on your server capacity.
INFRASTRUCTURE CONSIDERATIONS:
While you haven’t upgraded hardware recently, monitor these metrics during your next payroll run:
- CPU utilization (should stay below 80%)
- Memory usage and swap activity
- Disk I/O wait times
- Temp tablespace consumption
If temp tablespace exceeds 80% capacity, expand it by at least 50%. Temp space exhaustion causes query performance to crater as operations spill to disk.
IMMEDIATE ACTION PLAN:
- Update database statistics today (1-2 hours maintenance window)
- Add the composite indexes mentioned above (30 minutes)
- Increase connection pool settings (requires JDE restart - 15 minutes)
- Configure parallel payroll processing for next cycle (2-3 hours setup)
- Set up monitoring for temp tablespace and connection pool usage
This comprehensive approach addresses the SQL performance issues, eliminates resource contention, and prevents other HR functions from lagging. You should see payroll processing time drop back to 45-60 minutes, and interactive HR operations will remain responsive during payroll runs.
Implement the database and connection pool changes first - these are quick wins. Then work on parallel processing configuration for longer-term optimization.