HOUSTON -- Dan Haren can't remember the last time he felt this good.
The right-hander struck out nine in his first complete game this season and Tony Abreu had a career-high four hits, leading the Arizona Diamondbacks to a 6-3 victory against the struggling Houston Astros on Thursday night.
"I had a good feeling a couple days ago that I was going to come out and throw good, so hopefully this is a sign of things to come," Haren said.
Kelly Johnson led off the game with his 10th home run of the year, giving him the National League lead. Haren (4-1) allowed seven hits and walked one for his 10th career complete game and first since July 10 against Florida.
It was the first complete game by a Diamondbacks pitcher since Jon Garland did it Aug. 2 against the New York Mets.
"The action on his pitches were the best he's got this year," Arizona manager A.J. Hinch said. "Just his pace, his tempo, everything about him on the mound tonight, he was pitching with a little edge. You can see it. Once you get Dan Haren the lead, it was fun to watch."
The Astros lost for the ninth time in 10 games and dropped to an NL-worst 9-19.
"Not being able to sustain an inning, that's been really hurting us," manager Brad Mills said. "Without giving Haren too much praise, he did a pretty good job of making some pitches early in the game."
Abreu scored in Arizona's three-run third inning and drove in a run with a double in the fourth. The Diamondbacks took three of four in the series.
Astros starter Wandy Rodriguez (1-4) had his worst outing of the season, yielding nine hits and five runs in 3 2/3 innings. He walked one and struck out four.
The left-hander has struggled in the two outings since his start was pushed back one day because of back spasms. Rodriguez said he feels great, but he had trouble locating his fastball on Thursday.
Justin Upton singled in a run and scored, and Abreu came home on a sacrifice fly to push Arizona's lead to 4-0 in the third.
Haren gave up a double to Michael Bourn to start the first inning before retiring the next nine batters -- striking out seven of them. He didn't allow another hit until Keppinger's double in the fourth.
Haren, who allowed 10 hits and three runs in six innings in his last outing, was excited about going the distance for a complete game.
"They aren't easy to come by," he said. "I threw 200-plus innings the last five years or so, but my complete games are like two or three here or there. To get one is special. It feels really good when you are walking out to the mound in the ninth looking to accomplish something."
Haren gave up two singles in the fourth, but didn't yield another hit until a bunt by Humberto Quintero with no outs in the eighth. Quintero later scored to make it 6-3.
"I was being very aggressive, especially in the middle part of the game," Haren said. "I was just focused on keeping the ball down, going right after them with quality stuff."
- It was Johnson's second leadoff home run.
- Lee told reporters before the game he might retire when his contract expires after the 2012 season.
- Ten Houston Texans players participated in a home run derby before the game. Reliant Energy made a donation to local Boys & Girls Clubs for each home run hit and the event raised more than $31,000. Quarterback Matt Schaub raised the most money with $5,500.