Arroyo, in his 13th major-league season and making his 308th start, threw his fifth career shutout. It was his 13th complete game.
San Diego managed a single in the second, fifth and ninth innings while seeing its six-game winning streak come to an end.
Arroyo (4-5) struck out eight and walked one while throwing 110 pitches.
Zack Cozart opened the Cincinnati scoring with a solo shot in the first, Ryan Hanigan added a two-run blast in the seventh and Todd Frazier had a two-run homer in the eighth.
The first and second homers came off starter Kip Wells (1-2), who allowed three runs on seven hits in six-plus innings.
Cincinnati snapped a three-game skid.