Jermain Defoe's late penalty earned Portsmouth only their fourth home win this season as Sunderland's miserable away form continued at Fratton Park.
Defoe, right, celebrates his winner with Croatian midfielder Kranjcar
An abysmal first half was typified by poor passing and scrappy play, and a Sulley Muntari shot that flew over was the closest either side came to a goal.
Sunderland were holding their own, though, until Phil Bardsley felled Nico Kranjcar and Defoe scored the penalty.
Grant Leadbitter had Sunderland's best chances but Pompey comfortably held on.
Portsmouth marked manager Harry Redknapp's 100th match in charge with a win that ensures their European push remains on track.
Sunderland have now lost their last 10 matches away from the Stadium of Light.
Even before kick-off the clash did not look like being a classic, with Pompey having struggled to reproduce their fine away form at Fratton Park this season.
There was a distinct lack of swagger about the hosts' play in a dour first half.
For their part, Sunderland were happy to sit deep and play on the break and it made for a scrappy, scruffy first 45 minutes that was almost totally devoid of goalmouth action.
Muntari had the first decent effort at goal, driving narrowly over with a 25-yard free-kick, while Herman Hreidarsson headed wide from a Kranjcar corner.
For Sunderland, Andy Reid was lively on his full debut, while Leadbitter appealed for a penalty when his shot hit Sol Campbell on the arm on 35 minutes, only for his pleas to be rightly waved away.
Less clear was referee Phil Dowd's decision not to award a spot-kick when Johnny Evans pulled Hreidarsson back in the box late in the half.
But it would have been harsh on an effective Black Cats defensive display and the teams entered the break on level terms.
Pompey fired out of the blocks in the second half, Defoe volleying a Milan Baros cross straight at keeper Craig Gordon and then forcing the Scot into action again with a 20-yard drive.
Sunderland continued to hold their opponents at arms length for the most part, though, and went close themselves when Leadbitter drove a 30-yard free-kick wide.
However, the match was decided by Bardsley's foul on Kranjcar, the Croatian bamboozling the Sunderland full-back before tumbling over his leg and Defoe dispatched the penalty with aplomb.
Thereafter, only Portsmouth looked like scoring and, with substitute Nwankwo Kanu pulling the strings and Glen Johnson bombing forward down the right, only poor finishing kept Sunderland in the game.
Kanu and Defoe both missed the target with close-range efforts, while Johnson drove wide left-footed in stoppage time but Defoe's strike proved enough.
Portsmouth manager Harry Redknapp:
"It was always going to be a tough game. Sunderland are a good side and are in a false position so I knew we would have to be patient.
"To be fair, I could always see one goal winning it and while they were very tight defensively, I didn't think they troubled us at our end very often at all.
"In the end, Kanu and Kranjcar's creativity caused them problems and I felt we deserved the win."
Sunderland boss Roy Keane:
"Without a shadow of a doubt, I would have liked us to have troubled their keeper more. We could have played until midnight and not scored.
"We kept them quiet but not quiet enough - the players have got to learn that you can feel comfortable in a game and then get punished. We're not learning fast enough.
"Unfortunately, there were signs today that my players were overawed by the occasion and I expect they're in the Pompey dressing room asking for autographs now. I just hope in future they leave their autograph books at home."
Portsmouth: James, Johnson, Campbell, Distin, Hreidarsson, Diop, Diarra, Muntari, Kranjcar, Baros (Kanu 64), Defoe.
Subs Not Used: Ashdown, Lauren, Utaka, Davis.
Goals: Defoe 69 pen.
Sunderland: Gordon, Bardsley, Nosworthy, Evans, Collins, Whitehead, Leadbitter (Yorke 79), Etuhu, Murphy (Prica 84), Reid (Chopra 70), Jones.
Subs Not Used: Ward, McShane.
Booked: Collins, Yorke.
Ref: Phil Dowd (Staffordshire).
BBC Sport Player Rater man of the match: Portsmouth's David James on 7.61 (on 90 minutes).
• Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.