Another off-night for the Seattle Mariners' offense? Jason Vargas and two relievers were stingy enough to make it work.

Vargas stymied the St. Louis Cardinals into the eighth inning and Matt Holliday failed again in the clutch in a 2-1 victory that prevented a three-game sweep on Wednesday night. The Mariners scored two or fewer runs for the seventh time in 13 games, winning for the first time in that stretch.

"It was an unbelievably pitched game," manager Don Wakamatsu said. "To me, he dominated an awfully good lineup, he took us deep into the ballgame."

Holliday struck out on an 0-2 count on a ball in the dirt against Brandon League with the tying run at third to end the eighth, dropping his average to .194 with runners in scoring position.

"That's the thing when you get ahead, you try and finish him off with your strikeout pitch and not give him anything good," League said. "You don't want him to put it in play."

Vargas (5-2) gave up a run on five hits in 7 2-3 innings, the second-longest outing of his career, and is 3-0 over his last eight starts. He outpitched St. Louis rookie Jaime Garcia (6-3), who gave up two runs on five hits in seven innings.

Albert Pujols barely missed homering on a drive off the top of the wall in left-center in the fourth, a ball that appeared to pop in and out of left fielder Milton Bradley's glove.

"When I hit that ball, I thought it was definitely going to go a long way," Pujols said. "But it didn't. It could have been worse, he could have grabbed that ball."

Garcia had been 3-0 in his previous six starts, and his ERA climbed 10 points to 1.59.

"It's kind of one of those games that yes, we probably should have come out with a win. Garcia pitched perfect," Pujols said. "We just didn't put our hits together."

Ichiro Suzuki doubled and singled for his major league-leading 32nd multihit game and second in the series, and extended his interleague hitting streak to 20 games. Suzuki singled off Dennys Reyes to open the eighth and stole second but was picked off by reliever Jason Motte.

Reyes has allowed nine consecutive batters to reach base, eight hits and a walk. In his last five appearances, he's allowed 10 hits and six earned runs in two-thirds of an inning.

David Aardsma worked the ninth for his 14th save in 18 chances. Chone Figgins' fifth-inning single was the go-ahead hit for the Mariners, who have won three of 13.

Pujols' near homer with one out in the fourth was the second call to undergo video review this season at Busch Stadium, both of which confirmed the original ruling. Second base umpire Fieldin Culbreth said the ball had fallen just short, immediately waving the safe sign.

Bradley barely missed a leaping catch on Pujols' drive, which seemed to lose steam on a humid night. Pujols politicked unsuccessfully as he stood at second but eventually scored on Ryan Ludwick's sacrifice fly to tie it at 1.

The Mariners had three baserunners in the fourth, Garcia's toughest inning, but needed Josh Wilson's disruptive slide at second to prevent an inning-ending double play on Ryan Langerhans' RBI grounder. Shortstop Brendan Ryan had to elevate and still got struck in the thigh.

"That was one of my better plays, just getting out of the way," Ryan said. "As soon as he hit it I thought it would we would have to be perfect to get the double play."

Notes: Cardinals C Yadier Molina, the NL Gold Glove winner the last two seasons, had two passed balls to double his season total. Both came on high pitches. ... Mariners LHP Erik Bedard (shoulder) threw 40 pitches in a simulated game. He's scheduled for a light side session on Friday and then would make a three-inning rehab start for Rookie-level Peoria next week. ... The other home run reviewed at Busch was a home run by Felipe Lopez on May 21 against the Angels. ... Mariners 3B Jose Lopez left after lining out in the sixth with mild patella tendinitis in his left knee. ... David Freese had three singles for St. Louis.