Left-arm spinner Ravindra Jadeja broke the back of Sri Lanka's resistance after lunch to secure India's series-clinching victory by an innings and 53 runs in the second test on Sunday.
The all-rounder claimed his ninth five-wicket haul as Sri Lanka, forced to follow on after being shot out for 183 in the first innings, made 386 in the second before collapsing minutes before the tea break on the penultimate day.
Dimuth Karunaratne's gallant 141 merely delayed the inevitable as Jadeja (5-152) and spin partner Ravichandran Ashwin (2-132) tormented Sri Lanka on a worn-out track where the ball spun alarmingly and often kicked off.
It was a first victory by an innings or more for India in Sri Lanka and, following their biggest victory by runs in Galle last week, ensured an eighth straight series triumph under captain Virat Kohli.
Sri Lanka will take some comfort, however, from a second innings resurgence that was built around the 191-run stand between Karunaratne and Kusal Mendis, who fell for 110 on Saturday.
Karunaratne continued his grim battle after Sri Lanka resumed the fourth day on 209-2 at the Sinhalese Sports Cricket Ground.
Nightwatchman Malinda Pushpakumara threw away his wicket, attempting a bizarre reverse slog against Jadeja who dismissed Sri Lanka skipper Dinesh Chandimal for two in his next over.
Karunaratne and former captain Angelo Mathews resisted India for a while during a 69-run stand but Jadeja returned to wreck Sri Lanka after the lunch break.
Karunaratne's defiant knock, which included 16 boundaries, came to a cruel end when he was presented with an unplayable delivery that reared up, hit his gloves and ballooned into the air for Ajinkya Rahane to catch behind the wicketkeeper.
Mathews followed next, edging Jadeja to perish caught behind for 36 and Hardik Pandya claimed a couple of late wickets to hasten Sri Lanka's collapse.
Pallekele hosts the dead rubber third and final test from Saturday.
India 622 for 9 dec
(Pujara 133, Rahane 132, Jadeja 70, Saha 67, Rahul 57, Ashwin 54, Herath 4-154) beat Sri Lanka 183
(Dickwella 51, Ashwin 5-69) and 386 (f/o)
(Karunaratne 142, Mendis 110, Jadeja 5-152) by an innings and 53 runs