SAN DIEGO (AP) -- Jake Peavy became so good so fast that whenever he allowed three or four earned runs in a game, people began to wonder what was going on.
The Padres won for the 12th time in 15 games, overcoming a combined three-hitter by Al Leiter and John Riedling. Trevor Hoffman threw four pitches in a perfect ninth for his 404th career save and his 11th in 13 chances this year.
Padres pitchers retired the last 12 batters in a row.
Peavy (3-0), last year's major-league ERA champ at 2.27, had gotten four straight no-decisions, a span that saw him allow an uncharacteristically high number of earned runs. Peavy has rarely allowed more than two earned runs in a start but did it in each of his last three outings, a total of 11 in 21 1/3 innings. He allowed four earned runs in each of his last two starts.
"You look at those two previous starts, I think the bar's been set so high on Jake that sometimes everybody's a little surprised if he does have a couple shaky outings," manager Bruce Bochy said. "You look at them, and they actually weren't that bad.
"Everybody's going to have their rough moments, and if that's his rough moment, I'll take it, because despite giving up some runs, he gave us a great effort and gave us a chance to win," he said.
Peavy said he was leaning back a little bit during his delivery in previous starts, a flaw that bullpen coach Darrel Akerfelds detected.
"I felt a little bit better mechanically and just controlled the baseball," Peavy said. "It doesn't matter how good or bad your arm feels, you have to have good mechanics. You've got to throw the ball where you want to throw it. That's for the most part what I did tonight."
After escaping a bases-loaded jam in the fourth inning, Peavy allowed the Marlins to close to 2-1 in the sixth on Mike Lowell's
sacrifice fly. That brought up Carlos Delgado, who hit a leadoff double in the gap in left-center and advanced on Miguel Cabrera's groundout.
Peavy struck out eight and walked one.
San Diego took a 2-0 lead in the second off Leiter (1-4).
With Phil Nevin aboard on a leadoff walk, Brian Giles hit what looked like should been a two-run home run but ended up with a ground-rule double. His fly ball landed on top of the auxiliary scoreboard on the right field wall and bounced back onto the field. Bochy argued unsuccessfully to get the call overturned.
"What are you going to do?" said Giles, whose 21 RBI have all come on the road. "We had runners on second and third and no outs, and those runs won the game."
Leiter allowed two runs and three hits in six innings, walked five and struck out three.
"This is the story of our whole year. We've gotten good pitching, but we haven't been scoring enough runs," manager Jack McKeon said. "Al pitched a good game. He deserved a better fate. When he pitches a game like that, you've got to win."
The Marlins have scored just six runs in Leiter's four losses and just 21 total in his seven starts.
"Jake Peavy is a heck of a pitcher. That's what happens. I give up two, he gives up one and they have a guy who has 400 saves," Leiter said.
The Marlins' 2-7 record in one-run games is the worst in the NL. ... Florida's A.J. Burnett is scheduled to start Sunday against the Padres for the first time since his nine-walk no-hitter at San Diego on May 12, 2001. ... The San Diego Chicken made his Petco Park debut. ... Padres infielder Geoff Blum, on the disabled list with a bruised chest since April 30, will begin a three-day rehab assignment at Class A Lake Elsinore on Monday and is due to rejoin the big-league team when it starts a road trip next Friday at Seattle.