Endrias Bridge
Detailed infrastructure specifications for deploying Endrias Bridge in large-scale environments — covering sizing tiers from small databases up to multi-terabyte migrations on AWS RDS and Azure SQL.
Sizing Tiers Overview
Endrias Bridge categorizes source databases into four sizing tiers. Each tier drives host sizing, network bandwidth requirements, batch configuration, and estimated migration windows. Run the built-in DB Sizing Scan before planning any migration to confirm the correct tier.
| Tier | Database Size | Row Volume (est.) | Recommended Host RAM | Min. Network | Est. Migration Window |
|---|---|---|---|---|---|
| Small | < 10 GB | < 50 M rows | 8 GB | 100 Mbps | < 1 hour |
| Medium | 10 – 100 GB | 50 M – 500 M rows | 16 GB | 1 Gbps | 1 – 8 hours |
| Large | 100 GB – 1 TB | 500 M – 5 B rows | 32 – 64 GB | 10 Gbps | 8 – 48 hours |
| Extra-Large | 1 TB+ | 5 B+ rows | 64 – 128 GB | 10 Gbps (25 Gbps ideal) | 48 hours – 2 weeks |
Per-Tier Specifications
Detailed hardware and infrastructure specifications for each sizing tier.
- CPU
- 4 cores, 2.5 GHz+
- RAM — Minimum
- 8 GB
- RAM — Recommended
- 16 GB
- Network Bandwidth
- 100 Mbps (1 Gbps preferred)
- Disk I/O (Migration Host)
- 3,000 IOPS, 50 GB free temp space
- Source → Host Latency
- < 20 ms acceptable
- Host → Target Latency
- < 20 ms acceptable
- CPU
- 4 – 8 cores, 2.5 GHz+
- RAM — Minimum
- 16 GB
- RAM — Recommended
- 32 GB
- Network Bandwidth
- 1 Gbps
- Disk I/O (Migration Host)
- 5,000 IOPS, 100 GB free temp space
- Source → Host Latency
- < 10 ms ideal, < 20 ms max
- Host → Target Latency
- < 10 ms ideal, < 20 ms max
- CPU
- 8 – 16 cores, 3.0 GHz+
- RAM — Minimum
- 32 GB
- RAM — Recommended
- 64 GB
- Network Bandwidth
- 10 Gbps required
- Disk I/O (Migration Host)
- 10,000 IOPS, 500 GB free temp space
- Source → Host Latency
- < 5 ms ideal, < 20 ms max
- Host → Target Latency
- < 5 ms ideal, < 20 ms max
- CPU
- 16 – 32 cores, 3.0 GHz+
- RAM — Minimum
- 64 GB
- RAM — Recommended
- 128 GB
- Network Bandwidth
- 10 – 25 Gbps required
- Disk I/O (Migration Host)
- 20,000+ IOPS, 2 TB free temp space
- Source → Host Latency
- < 5 ms (dedicated private link)
- Host → Target Latency
- < 5 ms (same AZ/region)
Windows Host Requirements
The migration host is the Windows machine that runs Endrias Bridge. It acts as the orchestration layer — reading from the source database, transforming data, and writing to the target. This host must have stable, low-latency connectivity to both the source and the target simultaneously.
Operating System
-
Windows Server 2022 (Recommended) Best performance for background services; supports Large Send Offload (LSO) and RDMA for 10/25 GbE NICs.
-
Windows Server 2019 Fully supported. Use Datacenter edition if running multiple migration agents on the same host.
-
Windows 10 / 11 Pro or Enterprise (64-bit) Suitable for Small and Medium tier migrations. Not recommended for 24+ hour Large/XL migrations due to sleep/power policy interference.
-
Windows Server 2016 / Windows 10 Home — Not Recommended Server 2016 lacks ODBC Driver 18 optimizations; Windows Home lacks required Group Policy controls for network tuning.
CPU Requirements
| Tier | Minimum Cores | Recommended Cores | Clock Speed | Notes |
|---|---|---|---|---|
| Small | 4 | 4 | 2.5 GHz+ | Single parallel worker |
| Medium | 4 | 8 | 2.5 GHz+ | 2 – 4 parallel workers |
| Large | 8 | 16 | 3.0 GHz+ | 4 – 8 parallel workers; hyperthreading ON |
| Extra-Large | 16 | 32 | 3.0 GHz+ | 8 – 16 parallel workers; NUMA-aware preferred |
RAM Requirements
Batch size directly scales with available RAM. Endrias Bridge holds one or more batches in memory per parallel worker simultaneously — under-provisioned RAM causes excessive swap, which is the single most common cause of Large-tier migration timeouts.
| Tier | Minimum RAM | Recommended RAM | Why |
|---|---|---|---|
| Small | 8 GB | 16 GB | Default batch (10 K rows) fits easily |
| Medium | 16 GB | 32 GB | 50 K-row batches × 2 – 4 workers |
| Large | 32 GB | 64 GB | 100 K-row batches × 4 – 8 workers |
| Extra-Large | 64 GB | 128 GB | 250 K-row batches × 8 – 16 workers |
Disk Requirements
| Component | Small | Medium | Large | Extra-Large |
|---|---|---|---|---|
| Temp/Staging Space | 20 GB free | 100 GB free | 500 GB free | 2 TB+ free |
| Log File Space | 5 GB | 10 GB | 50 GB | 200 GB |
| Disk IOPS | 3,000 | 5,000 | 10,000 | 20,000+ |
| Recommended Disk Type | SSD (any) | NVMe SSD | NVMe SSD (RAID-0 for staging) | NVMe SSD array or instance storage |
Software Dependencies
The Endrias Bridge installer bundles most dependencies. The following table shows what is included versus what must be pre-installed on the migration host.
| Dependency | Version | Bundled? | Notes |
|---|---|---|---|
| Python | 3.11+ | Bundled | Embedded distribution; does not interfere with system Python |
| ODBC Driver for SQL Server | 18 (MSODBCSQL18) | Bundled | Required for SQL Server and Azure SQL sources/targets |
| MySQL Connector/ODBC | 8.3+ | Bundled | Required for MySQL source connections |
| PostgreSQL psycopg2 | 2.9+ | Bundled | Required for PostgreSQL / Azure PostgreSQL targets |
| Visual C++ Redistributable | 2015 – 2022 (x64) | Bundled | Required by ODBC drivers; installer silently upgrades if needed |
| .NET Framework | 4.7.2+ | Pre-installed | Present on all Windows Server 2019/2022; may need manual install on Win 10 |
| PowerShell | 5.1+ (7.x preferred) | Pre-installed | Used for host health checks and pre/post migration hooks |
| AWS CLI | 2.x | Manual | Required only for S3 staging mode on Extra-Large migrations |
| Azure CLI | 2.x | Manual | Required only for Azure Blob staging mode |
C:\MigrationTool\runtime\ and adds them to the process PATH only for the duration of the migration service. No system-wide PATH changes are made.Latency & Bandwidth Requirements
Network performance is typically the primary bottleneck in large database migrations. Endrias Bridge streams data continuously — any packet loss, retransmission, or high-latency hop will compound across billions of rows and dramatically extend migration windows.
Latency Targets
| Path | Ideal | Acceptable | Degraded (expect slowdown) | Unsupported |
|---|---|---|---|---|
| Source DB → Migration Host | < 1 ms | < 5 ms | 5 – 20 ms | > 20 ms |
| Migration Host → Target DB | < 1 ms | < 5 ms | 5 – 20 ms | > 20 ms |
| Round-trip (full path) | < 2 ms | < 10 ms | 10 – 40 ms | > 40 ms |
Bandwidth Requirements
| Tier | Minimum Bandwidth | Recommended | Sustained Throughput (expected) |
|---|---|---|---|
| Small | 100 Mbps | 1 Gbps | 10 – 80 MB/s |
| Medium | 1 Gbps | 1 – 10 Gbps | 80 – 400 MB/s |
| Large | 10 Gbps | 10 Gbps dedicated | 400 MB/s – 1.2 GB/s |
| Extra-Large | 10 Gbps | 25 Gbps | 1 – 3 GB/s |
Firewall Port Requirements
Open the following ports on firewalls, security groups, and NSGs along the entire path from the migration host to each endpoint. Endrias Bridge initiates all connections outbound — no inbound connections to the migration host are required.
| Database Engine | Default Port | Direction | Protocol | Notes |
|---|---|---|---|---|
| SQL Server (on-prem / EC2) | 1433 | Migration host → Source | TCP | Use Windows Firewall inbound rule on source; named instances may use dynamic ports |
| AWS RDS for SQL Server | 1433 | Migration host → RDS endpoint | TCP | Add migration host's private IP to RDS security group inbound rule |
| Azure SQL Database | 1433 | Migration host → Azure SQL endpoint | TCP over TLS 1.2+ | Azure SQL enforces TLS; MSODBCSQL18 handles this automatically. Add client IP to Azure SQL firewall. |
| PostgreSQL (on-prem / EC2) | 5432 | Migration host → Source/Target | TCP | Update pg_hba.conf to allow migration host IP; SSL recommended |
| AWS RDS for PostgreSQL / Aurora | 5432 | Migration host → RDS endpoint | TCP | RDS security group: inbound TCP 5432 from migration host subnet CIDR |
| Azure Database for PostgreSQL | 5432 | Migration host → Azure PG endpoint | TCP over TLS | Flexible Server: add VNet integration or public IP firewall rule |
| MySQL (on-prem / EC2) | 3306 | Migration host → Source/Target | TCP | Update bind-address in my.cnf if MySQL is bound to localhost only |
| AWS RDS for MySQL / Aurora MySQL | 3306 | Migration host → RDS endpoint | TCP | RDS security group: inbound TCP 3306 from migration host subnet CIDR |
| Azure Database for MySQL | 3306 | Migration host → Azure MySQL endpoint | TCP over TLS | Flexible Server: VNet integration or firewall rule for migration host IP |
| AWS S3 (staging mode) | 443 | Migration host → S3 HTTPS endpoint | HTTPS | Required only for XL staging mode; use VPC Gateway Endpoint to avoid internet egress |
VPN / Direct Connect / ExpressRoute
For on-premises source databases migrating to AWS or Azure, a private high-throughput connection is strongly recommended for anything above the Small tier. Public internet paths introduce variable latency, packet loss risk, and egress costs.
- Max throughput: ~1.25 Gbps per tunnel (use ECMP for up to 25 tunnels)
- Latency adds ~5 – 15 ms over internet path
- Use BGP routing — avoid static routes for failover reliability
- Adequate for Medium tier; marginal for Large
- Cost: ~$0.05/hr per VPN connection
- Dedicated bandwidth: 1, 10, or 100 Gbps
- Sub-millisecond jitter; private, not internet-routed
- Required for Large and Extra-Large tier on-prem sources
- Use Hosted Connection (partner) for faster provisioning
- Cost: port + data transfer charges
- Bandwidth tiers: 50 Mbps – 100 Gbps
- Private peering to Azure SQL VNet
- Required for on-prem sources > 100 GB to Azure SQL
- Use FastPath for ultra-low latency bypass
- Cost: circuit + gateway + data charges
Topology Recommendation for Large/XL Migrations
The migration host should never act as a network bridge between on-premises and cloud. It should be deployed in the cloud (same AZ/region as target) with the source connectivity delivered via Direct Connect or ExpressRoute. This minimizes intra-cloud hops from host to target.
AWS RDS Target Sizing
These recommendations apply to RDS for SQL Server, MySQL, PostgreSQL, and Aurora. Sizing the RDS instance correctly before migration prevents target-side write bottlenecks.
Instance Class Recommendations
| DB Size | Minimum Instance Class | Recommended Class | vCPU | Memory | Notes |
|---|---|---|---|---|---|
| < 10 GB | db.t3.medium |
db.t3.large |
2 – 4 | 4 – 8 GB | T-class burstable OK for small databases |
| 10 – 100 GB | db.r6i.large |
db.r6i.xlarge |
2 – 4 | 16 – 32 GB | Avoid T-class; use memory-optimized r6i |
| 100 GB – 1 TB | db.r6i.xlarge |
db.r6i.2xlarge |
4 – 8 | 32 – 64 GB | Enable Enhanced Monitoring; Multi-AZ after migration |
| 1 TB – 5 TB | db.r6i.2xlarge |
db.r6i.4xlarge |
8 – 16 | 64 – 128 GB | Consider Aurora for > 3 TB (auto-scales storage) |
| 5 TB+ | db.r6i.4xlarge |
db.r6i.8xlarge or Aurora |
16 – 32 | 128 – 256 GB | Aurora Serverless v2 may be more cost-effective at rest |
db.r6i or db.m6i families for sustained high-write workloads during migration load.Storage Configuration
| DB Size | Storage Type | Provisioned IOPS | Auto-scaling | Notes |
|---|---|---|---|---|
| < 10 GB | gp3 | 3,000 (baseline) | Yes | gp3 default is sufficient |
| 10 – 100 GB | gp3 | 6,000 – 12,000 | Yes | Manually provision gp3 IOPS above baseline to avoid throttling |
| 100 GB – 1 TB | io2 | 16,000 – 64,000 | Yes | io2 Block Express for highest durability and consistent low latency |
| 1 TB+ | io2 Block Express | 64,000 – 256,000 | Yes | Block Express supports up to 64 TB; plan for 20 – 30% headroom above initial size |
Azure SQL Target Sizing
Azure SQL Database is available in DTU-based (Standard/Premium) and vCore-based (General Purpose, Business Critical, Hyperscale) purchasing models. For migration workloads, vCore Business Critical or Hyperscale is recommended for Large and XL tiers due to in-memory throughput and local SSD storage.
DTU / Premium Tier (Legacy Sizing)
| DB Size | Minimum Tier | Recommended Tier | Max DTUs | Notes |
|---|---|---|---|---|
| < 10 GB | S3 (100 DTU) | P1 (125 DTU) | 125 | S3 is acceptable; P1 gives consistent IOPS |
| 10 – 100 GB | P1 (125 DTU) | P2 (250 DTU) | 250 | P2 provides 2,000 MB/s log write throughput |
| 100 GB – 1 TB | P2 (250 DTU) | P4 (500 DTU) | 500 | Must be Premium tier for > 500 GB max storage |
| 1 TB+ | P6 (1,000 DTU) | P11 (1,750 DTU) | 1,750 | Consider Hyperscale for > 4 TB |
vCore Model (Recommended)
| DB Size | Service Tier | Min vCores | Recommended | Notes |
|---|---|---|---|---|
| < 10 GB | General Purpose | GP_Gen5_2 | GP_Gen5_4 | Remote SSD; adequate for small workloads |
| 10 – 100 GB | General Purpose | GP_Gen5_4 | GP_Gen5_8 | Remote premium SSD; scale vCores for write parallelism |
| 100 GB – 1 TB | Business Critical | BC_Gen5_4 | BC_Gen5_8 | Local NVMe SSDs; 3 replicas; built-in HA — ideal for migration landing zone |
| 1 TB+ | Hyperscale or BC | HS_Gen5_8 | HS_Gen5_16 | Hyperscale: auto-scale storage to 100 TB; fast page servers reduce IOPS bottleneck |
Storage Configuration Best Practices
| Setting | AWS RDS | Azure SQL | Rationale |
|---|---|---|---|
| Auto-scaling | Enable storage autoscaling with 20% headroom | Automatic in vCore model | Prevents storage-full abort mid-migration |
| Storage type for Large | io2 Block Express | Business Critical (local NVMe) | Consistent low-latency writes under sustained load |
| Pre-allocate target size | Set initial allocation = source size × 1.3 | Configure max size in portal | Avoids mid-migration storage growth events that pause writes |
| Multi-AZ / Zone-redundant | Enable after migration is validated | Enable Zone Redundancy after validation | Replica sync during migration adds write latency |
| Backup during migration | Disable automated backups (set retention to 0) during load, re-enable after | Backup is continuous; cannot disable — accept PITR overhead | Reduces I/O contention on target during high-write migration |
Parameter Group Tuning
Apply these parameter changes to the target database before migration begins. Endrias Bridge can automate most of these via the Pre-Migration Optimizer, but manual review is recommended for Large and XL tiers.
MySQL (RDS / Aurora MySQL)
| Parameter | Migration Value | Default | Reason |
|---|---|---|---|
innodb_buffer_pool_size | 75% of instance RAM | 128 MB | Cache insert buffer; reduces disk I/O on target |
innodb_log_file_size | 2 GB (or 4 GB for XL) | 48 MB | Larger redo log avoids frequent checkpoint stalls |
innodb_flush_log_at_trx_commit | 2 (during migration) | 1 | Reduces fsync calls per committed batch; restore to 1 post-migration |
max_allowed_packet | 256 MB | 4 MB | Supports large BLOB / TEXT rows in batches |
max_connections | 2 × parallel_workers + 20 | 151 | Each worker holds a persistent connection pool |
bulk_insert_buffer_size | 256 MB | 8 MB | Speeds up bulk INSERT operations |
sync_binlog | 0 (during migration) | 1 | Disables binary log sync for write speed; restore to 1 after |
innodb_flush_log_at_trx_commit=2 and sync_binlog=0 reduces crash durability. These are acceptable during a controlled migration window but must be restored to production values before enabling application traffic.PostgreSQL (RDS / Aurora / Azure PG)
| Parameter | Migration Value | Default | Reason |
|---|---|---|---|
work_mem | 64 MB – 256 MB | 4 MB | Speeds sort/hash operations for large row sets |
maintenance_work_mem | 1 GB – 2 GB | 64 MB | Faster index rebuilds post-migration |
max_connections | 2 × parallel_workers + 20 | 100 | Avoid connection exhaustion with parallel workers |
checkpoint_completion_target | 0.9 | 0.5 | Spreads checkpoint I/O over longer period |
wal_buffers | 64 MB | -1 (auto) | Larger WAL buffer reduces WAL write stalls |
synchronous_commit | off (during migration) | on | Async commit; increases throughput; restore after migration |
max_wal_size | 4 GB – 16 GB | 1 GB | Avoids frequent forced checkpoints during bulk load |
autovacuum | off (during migration) | on | Prevents autovacuum contention during bulk insert; run VACUUM ANALYZE after |
SQL Server Target (RDS for SQL Server / Azure SQL)
| Setting | Migration Value | Notes |
|---|---|---|
| Recovery Model | BULK_LOGGED or SIMPLE | Minimizes log growth during bulk insert; switch to FULL after migration |
| Max Degree of Parallelism (MAXDOP) | 1 | Prevents parallel insert plans that conflict with Endrias Bridge worker parallelism |
| Auto-Shrink | OFF | Auto-shrink causes severe I/O contention; must be off |
| Auto-Close | OFF | Prevents connection teardown between batches |
| Fill Factor (indexes) | 80% | Applied when Endrias Bridge rebuilds indexes post-migration |
| Delayed Durability | FORCED (during migration) | Reduces log flush latency; restore to DISABLED after migration |
Batch Size Tuning Guide
Endrias Bridge reads data from the source in discrete batches and commits them to the target. Batch size is the single most impactful configuration parameter for large migration performance. Too small wastes round-trip overhead; too large risks OOM errors and unrecoverable partial-batch failures.
| Table Profile | Row Count | Recommended Batch Size | Strategy |
|---|---|---|---|
| Default / Unknown | Any | 10,000 rows | Safe default; no PK-range chunking needed |
| Large table | > 1 M rows | 50,000 – 100,000 rows | Tune up from default once row width is known; monitor target write latency |
| Very large table | > 10 M rows | 100,000 – 250,000 rows | Enable PK-range chunking; use --pk-chunk-size flag |
| Massive table | > 100 M rows | 250,000 rows | PK-range chunking mandatory; consider parallel sub-range workers |
| Wide-row table | Any, avg row > 10 KB | 1,000 – 5,000 rows | Reduce batch size to stay within memory formula; LOB columns require special handling |
--enable-pk-chunk in the migration config.Memory Formula
Use this formula to validate that your chosen batch size and worker count will fit within available RAM on the migration host. Exceeding available RAM forces Windows to page, which severely degrades throughput on Large-tier migrations.
-- overhead_factor = 3 (source buffer + target buffer + transform overhead)
-- avg_row_width_bytes: use MigrationBridge DB Sizing Scan output
-- Example: 100,000 rows × 500 bytes × 3 overhead × 8 workers
required_RAM = 100,000 × 500 × 3 × 8 = 1,200,000,000 bytes ≈ 1.2 GB
-- Add 4 GB for OS + MigrationBridge overhead → total host RAM needed: ~5.5 GB in this example
-- For safety: target_RAM >= required_RAM × 1.5
Quick Reference: Batch Size vs. Host RAM
| Batch Size | Avg Row Width | Workers | Required RAM | Suggested Host RAM |
|---|---|---|---|---|
| 10,000 | 500 B | 4 | ~60 MB | 8 GB |
| 50,000 | 500 B | 4 | ~300 MB | 8 GB |
| 100,000 | 500 B | 8 | ~1.2 GB | 16 GB |
| 100,000 | 2,000 B | 8 | ~4.8 GB | 16 GB |
| 250,000 | 500 B | 16 | ~6 GB | 32 GB |
| 250,000 | 2,000 B | 16 | ~24 GB | 64 GB |
| 250,000 | 10,000 B (10 KB) | 8 | ~60 GB | 128 GB |
Parallel Table Workers
Endrias Bridge migrates multiple tables simultaneously using a configurable worker pool. The optimal number of parallel workers balances CPU utilization on the migration host against connection limits on both source and target databases.
| Host CPU Cores | Formula | Recommended Workers | Connection Count |
|---|---|---|---|
| 4 cores | 4 / 2 = 2 | 2 | 4 – 6 total connections |
| 8 cores | 8 / 2 = 4 | 4 | 8 – 12 total connections |
| 16 cores | 16 / 2 = 8 | 8 | 16 – 24 total connections |
| 32 cores | 32 / 2 = 16 | 16 | 32 – 48 total connections |
# migration_config.json — parallel worker configuration { "migration": { "parallel_table_workers": 8, // CPU_cores / 2 "batch_size": 100000, // rows per batch "enable_pk_chunk": true, // for tables > 100M rows "pk_chunk_size": 5000000, // rows per PK sub-range "connection_pool_size": 3, // connections per worker "commit_interval": 1 // commit every N batches } }
parallel_table_workers based on the small-table majority. Large tables are automatically throttled via PK-range chunking to prevent one table from monopolizing all workers.Pre-Migration Checklist (Large Databases)
Complete every item in this checklist before initiating a Large or Extra-Large migration. Items marked with a warning badge have caused production migration failures when skipped.
-
Run DB Sizing Scan — use MigrationBridge's built-in sizing tool to confirm tier, total row count, avg row width, largest tables, and LOB column presence. Output drives all subsequent configuration decisions.
-
Benchmark rows/sec on a test table — run a 1 M-row test migration against a representative table to measure actual throughput. Use:
estimated_total_time = total_rows / measured_rows_per_sec. Add 20% buffer. -
Validate network latency and bandwidth — use
ping+iperf3between migration host, source, and target. Confirm < 5 ms latency and > 1 Gbps sustained throughput on the host-to-target path. -
Confirm target storage headroom Critical — provision target at source_size × 1.3 minimum. Storage-full mid-migration requires a full restart from the last checkpoint.
-
Disable non-critical indexes on target before migration — Endrias Bridge automatically disables and re-enables non-clustered indexes. Confirm this behavior is enabled in
migration_config.jsonvia"disable_target_indexes": true. -
Schedule during off-peak hours — for databases still serving read traffic, coordinate the migration window with application owners. Source reads during migration may degrade source query performance.
-
Set SQL Server MAXDOP=1 on source during migration Large/XL Only — prevents the source query optimizer from issuing parallel scans that compete with Endrias Bridge reads. Run:
EXEC sp_configure 'max degree of parallelism', 1; RECONFIGURE; -
Switch SQL Server source/target to Bulk-Logged recovery SQL Server only — minimally logs bulk operations, reducing transaction log growth by up to 80%. Run:
ALTER DATABASE [YourDB] SET RECOVERY BULK_LOGGED;Restore toFULLafter migration. -
Verify migration host disk space — confirm temp staging directory has sufficient free space per tier specification. Large checkpointing uses disk-based resume files.
-
Test target connectivity with credentials — use MigrationBridge's built-in Connection Test before starting. A failed authentication at hour 30 of a 48-hour migration is avoidable.
-
Disable target autovacuum (PostgreSQL targets) — set
autovacuum = offfor the target database during migration. Schedule a fullVACUUM ANALYZEimmediately after completion. -
Confirm firewall / security group rules — test all ports listed in the Firewall Ports section from the migration host using
Test-NetConnection(PowerShell) ortelnet. -
Take a pre-migration snapshot of the target — for RDS: create a manual snapshot before starting. For Azure SQL: note the PITR point-in-time before migration begins. This is the rollback point.
-
Notify stakeholders and set maintenance window — for Large migrations, ensure application teams, on-call DBAs, and leadership are aware of the window, expected duration, and rollback triggers.
SQL Server Source Preparation
Run these T-SQL commands on the SQL Server source database before starting a Large or XL migration. Reverse all changes after migration is validated.
-- ───────────────────────────────────────────────────────────────────────── -- SQL Server Pre-Migration Configuration -- Run on SOURCE database before starting Endrias Bridge migration -- ───────────────────────────────────────────────────────────────────────── -- 1. Limit parallelism on source to prevent competing parallel scans EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'max degree of parallelism', 1; RECONFIGURE; -- 2. Switch source to Bulk-Logged to reduce log file growth ALTER DATABASE [YourSourceDB] SET RECOVERY BULK_LOGGED; -- 3. Reduce lock escalation threshold to protect source OLTP traffic ALTER DATABASE [YourSourceDB] SET ALLOW_SNAPSHOT_ISOLATION ON; ALTER DATABASE [YourSourceDB] SET READ_COMMITTED_SNAPSHOT ON; -- 4. Verify source configuration SELECT name, recovery_model_desc, snapshot_isolation_state_desc, is_read_committed_snapshot_on FROM sys.databases WHERE name = 'YourSourceDB'; -- ───────────────────────────────────────────────────────────────────────── -- POST-MIGRATION: Restore original settings -- ───────────────────────────────────────────────────────────────────────── -- Restore MAXDOP to original value (check your baseline before migration) EXEC sp_configure 'max degree of parallelism', 0; -- 0 = SQL Server default (auto) RECONFIGURE; -- Restore full recovery model (important for DR / backup compliance) ALTER DATABASE [YourSourceDB] SET RECOVERY FULL; -- Take a log backup immediately after switching back to FULL BACKUP LOG [YourSourceDB] TO DISK = N'NUL'; -- Replace with actual backup path in production
AWS-Specific Guidance
EC2 Migration Host in Same AZ as RDS Target
Deploy the EC2 migration host in the same Availability Zone as the RDS target instance. Cross-AZ traffic incurs additional latency (typically 1 – 3 ms) and data transfer costs ($0.01/GB). For a 1 TB migration, same-AZ saves ~$10 in transfer costs and meaningfully reduces migration time.
-
Use Enhanced Networking (ENA) All modern EC2 instance types (c6i, r6i, m6i) support Enhanced Networking by default. Provides up to 25 Gbps network throughput and significantly lower latency than legacy instance types. Verify with:
ethtool -i eth0— should showenadriver. -
Place EC2 and RDS in same VPC and subnet Use a security group reference (not IP CIDR) for the RDS inbound rule pointing to the EC2 instance's security group. This survives instance replacement and IP changes.
-
Use S3 Staging for migrations > 500 GB For Extra-Large tier, configure Endrias Bridge to stage batches to S3 (same region) before loading into RDS. This decouples extraction from loading, allows parallel re-loading of failed ranges, and provides a durable checkpoint store. Use a VPC Gateway Endpoint to avoid internet egress costs.
-
Use Placement Groups for 25 Gbps throughput For XL migrations requiring maximum bandwidth, place the EC2 migration host in a cluster placement group in the same AZ. Combined with a 25 Gbps-capable instance type (e.g.,
r6i.8xlarge), this maximizes intra-AZ network bandwidth. -
CloudWatch monitoring during migration Enable Enhanced Monitoring on RDS (1-second granularity). Create CloudWatch alarms for:
WriteIOPSsaturation,FreeStorageSpacebelow 20%,DatabaseConnectionsapproaching max, andCPUUtilizationabove 85%.
Recommended EC2 Instance Types for Migration Host
| Tier | Instance Type | vCPU | RAM | Network | Notes |
|---|---|---|---|---|---|
| Small | c6i.xlarge | 4 | 8 GB | Up to 12.5 Gbps | Cost-efficient; compute-optimized |
| Medium | r6i.xlarge | 4 | 32 GB | Up to 12.5 Gbps | Memory-optimized for larger batches |
| Large | r6i.2xlarge | 8 | 64 GB | Up to 12.5 Gbps | Matches db.r6i.2xlarge target sizing |
| Extra-Large | r6i.4xlarge | 16 | 128 GB | Up to 25 Gbps | Use with cluster placement group for max throughput |
Azure-Specific Guidance
Migration Host in Same Region as Azure SQL
Deploy the Azure VM migration host in the same Azure region as the target Azure SQL Database or Managed Instance. Unlike AWS (AZ-level), Azure SQL zone redundancy operates within a region — intra-region latency to Azure SQL from a VM in the same region is typically < 1 ms.
-
Use VNet Integration for Private Endpoint Configure Azure SQL Private Endpoint so all traffic between the migration host VM and Azure SQL stays on the Azure backbone (no public internet). Place the VM in a subnet with a UDR (User Defined Route) pointing to the Private Endpoint subnet.
-
Use ExpressRoute for on-prem sources > 100 GB For on-premises SQL Server sources migrating to Azure SQL, provision an ExpressRoute circuit with at least 2 Gbps bandwidth. ExpressRoute delivers < 5 ms latency from on-prem to Azure SQL via Microsoft peering — required for sustained Large-tier throughput.
-
Use Azure Blob Staging for XL migrations Similar to S3 staging on AWS, configure Endrias Bridge to stage to Azure Blob Storage (same region) for Extra-Large migrations. Use a VNET Service Endpoint or Private Endpoint for Blob to avoid internet egress. Cost: ~$0.0184/GB storage + $0.0025/10K write operations.
-
Accelerated Networking on Azure VM Enable Accelerated Networking (SR-IOV) on the migration host VM. Supported on most D-series, E-series, and F-series VMs. Reduces CPU overhead for network I/O and delivers consistent low-latency throughput. Enable via: Azure Portal → VM → Networking → Enable Accelerated Networking.
-
Azure Monitor alerts during migration Set Azure Monitor alerts for the target Azure SQL: DTU/vCore consumption > 85%, storage consumption > 80%, connection failures > 5/min, and log write throughput approaching tier limit. Use Action Groups to alert on-call DBAs via email/SMS/PagerDuty.
Recommended Azure VM SKUs for Migration Host
| Tier | VM SKU | vCPU | RAM | Network | Notes |
|---|---|---|---|---|---|
| Small | D4s_v5 | 4 | 16 GB | 12.5 Gbps | General purpose; good price/performance |
| Medium | E8s_v5 | 8 | 64 GB | 12.5 Gbps | Memory-optimized; matches Azure SQL GP targets |
| Large | E16s_v5 | 16 | 128 GB | 12.5 Gbps | Matches BC_Gen5_8 target sizing |
| Extra-Large | E32s_v5 or M32ms | 32 | 256 GB | 16 Gbps | M-series for memory-bound XL migrations with wide rows |
Hybrid & On-Premises Guidance
VPN Configuration
When using a site-to-site VPN between on-premises and cloud, follow these requirements to maintain throughput during multi-day Large-tier migrations.
| Requirement | Specification | Why It Matters |
|---|---|---|
| Routing Protocol | BGP (not static routes) | Automatic failover to secondary tunnel; static routes require manual intervention during tunnel failure |
| Tunnel Mode | Active-Active (dual tunnels) | Doubles available bandwidth; provides failover without migration restart |
| IKE Version | IKEv2 | Faster re-keying; better handling of long-lived connections required for multi-day migrations |
| MTU | 1,400 bytes (or match IPsec overhead) | Prevents fragmentation of large batch packets; fragmentation causes retransmits and 30 – 50% throughput loss |
| DPD (Dead Peer Detection) | Enabled, 30-second interval | Ensures tunnel is restarted quickly after network interruption; avoids silent tunnel failures mid-migration |
| ECMP (Equal-Cost Multi-Path) | Enabled on VPN gateway (AWS: Transit Gateway ECMP) | Load-balances across both active tunnels for up to 2× throughput |
iperf3 for 30 minutes at migration batch concurrency levels before committing to the migration window. A VPN that sustains 200 Mbps for 5 minutes may degrade to 50 Mbps over a 30-hour migration due to IKE re-key overhead or ISP shaping.On-Premises Migration Host
If the migration host must reside on-premises (rather than cloud-side), ensure it has direct high-speed LAN access to the source database and dedicated WAN connectivity to the cloud target.
-
Migration host on same LAN segment as source database The host-to-source path should be on the same 10 GbE switch fabric. Avoid routing through WAN links, proxy servers, or DPI appliances for the source read path.
-
Dual NICs for large migrations Use a dedicated NIC for source reads and a separate NIC for cloud writes. Prevents source traffic from competing with target upload bandwidth on a single NIC queue.
-
UPS and power management Ensure migration host is on a UPS circuit. Configure Windows power plan to High Performance (prevents CPU throttling). Disable sleep and hibernate. A power event mid-migration does not corrupt data (Endrias Bridge uses durable checkpoints) but will require restart from last checkpoint.