HOUSTON — When Seattle reliever Alex Colome saw Houston's Tony Kemp knock his pitch into center field with one on in the eighth inning, he was certain it would be an extra-base hit.
Guillermo Heredia made sure that wasn't the case.
Heredia made a spectacular case to preserve Seattle's lead, Ryon Healy had three hits and drove in the go-ahead run, and the Mariners beat the Astros 3-2 on Saturday night.
It was yet another win in a close game by the Mariners, who have taken three straight from their AL West rivals and improved to 44-17 this season in games decided by one or two runs.
Seattle trailed 2-0 before scoring all of its runs with a two-out rally in the fourth. Nelson Cruz singled and scored on a double by Kyle Seager that sailed over Kemp's head in center field. Chris Hermann tripled to right field to tie it.
Healy put the Mariners on top with a single but was out at second trying to stretch it into a double.
With no outs and a runner at first in the eighth, Kemp hit a ball to center field that looked sure to drop in for a hit. Heredia raced to track it down and grabbed it as he fell to the ground. He popped up and threw to first to complete the double play.
"What a catch," Mariners manager Scott Servais said. "Everybody knows G is an awesome defender and never takes pitches off, but that play, that was the game."
Even Heredia didn't think he would be able to get to it off the bat.
"I charged the ball to catch it, but I didn't think I had a chance," he said. "At the end I said: 'Oh yeah, I got it.'"
An incredulous Kemp put both hands on his head as he slowly trotted back to the dugout.
"They put Heredia in for defense almost every night he doesn't play, so that tells you enough what they think about his defensive ability," Houston manager A.J. Hinch said. "He got a pretty decent break on it. It was a sizeable gap ... and then the ball hangs up just enough that he makes a great circus catch. I still wasn't sure that he caught it until he came up ready to throw pretty excited."
Colome said the catch, which helped him extend his streak of scoreless innings to 18 2/3, was the best he's seen while on the mound.
Wade LeBlanc (7-2) allowed three hits and two runs in five innings. Four relievers allowed a combined two hits in three innings before Edwin Diaz struck out two in a perfect ninth for his MLB-leading 45th save in 48 opportunities.
Charlie Morton (12-3) yielded seven hits and three runs in six innings for his first loss since July 1.
The Astros took an early lead on a two-run single by Tyler White in the second. Houston didn't have another baserunner until White walked to open the fifth. But LeBlanc got three routine outs to end the inning and his night.
Seattle had a chance to add to the lead in the sixth when Span singled to start the inning and Cruz singled with one out. But Seager grounded into a double play.
ALWAYS BE CLOSING
Diaz got his third save in as many games and his 45 saves are tied for second-most in a season in franchise history. Fernando Rodney ranks first with 48 in 2014.
Mariners: RHP Erasmo Ramirez, who hasn't pitched since April 27 because of a shoulder injury, will come off the disabled list to start on Sunday.
Astros: OF Jake Marisnick was placed on the 10-day disabled list with groin discomfort after he was injured running the bases on Friday night. OF Kyle Tucker was recalled from Triple-A Fresno to take his spot on the roster.
Houston left-hander Dallas Keuchel (9-9, 3.53 ERA) opposes Ramirez (0-2, 10.24) when the series concludes on Sunday. Keuchel has won six of his last seven decisions and allowed just three hits and one run in his last start but did not factor in the decision in a 2-1 win over the Giants. Ramirez is taking Felix Hernandez's spot in the rotation after the longtime Mariners ace, who has struggled all season, was demoted to the bullpen on Thursday night.