An hour passed without City ever demonstrating the energy needed to make Real Madrid feel threatened.
Only when Raheem Sterling and Kelechi Iheanacho came on - the second with 20 minutes to go - did City look as if they were ready to make the opposition sweat.
Maybe that was the plan. See if they could get to late in the second half still a goal from going through - 1-1 would have been enough - and then raise the tempo.
It was a high-risk strategy if so. Gareth Bale hit the bar following a corner after 65 minutes, and had that gone in, City would have been chasing two.
Had Joe Hart not been on his game again, the match could have slipped away just as easily.
In the second half he made several fine saves, beginning with an excellent one from Bale, put through by Luka Modric after 54 minutes.
A minute later a cross from Dani Carvajal picked out Cristiano Ronaldo, who got unexpected power in his header - and unexpected hang-time - to force an equally fine stop.
And in the 59th minute, substitute Lucas Vazquez put Ronaldo through only for Hart to be equal to the challenge again.
So they rode the storm; and then we waited for City's to blow. And waited. Drummed our fingers a little and listened to the pale blue end - the only people wearing the same green colour as Manchester City in the stadium were the stewards - as they sang the songs of encouragement. 'We're Manchester City - we'll fight to the end.'
But will they? They certainly have done, which is why this felt so disappointing.
City weren't bad, the winning goal was a deflection and they lost Vincent Kompany disruptively early.
They weren't embarrassed, Real Madrid are a very good team and this whole campaign has been a giant improvement on previous editions. It was just a bit . . . meh. A little bit ho, a little bit hum.
Madrid should have been nervous going into the final 10 minutes.
Instead they had the confidence of a boxer who knows he's got the fight on points and hasn't been troubled by too many of the punches.
The only way he could lose is if he sticks his chin out. And then they stuck their chin out.
A free-kick, conceded at a tight angle on the right. Perfect to be whipped into the centre, six minutes on the clock. A goal now could be it. The old smash and grab.
Kevin De Bruyne stood over it and, chuckle-headedly, tried to beat goalkeeper Keylor Navas at his near post.
The ball was going out by the time it reached the edge of the six-yard box and was drilled into the side-netting. What a waste. Much like the rest of it, really.
Real Madrid showed them to the exits, shook hands and sent them on their way. It's neighbours Atletico next. Couldn't be more different.
Manuel Pellegrini didn't have much luck as Real Madrid manager, and he didn't have much luck in the first half here, either.
Just as City looked to be settling down into a strong shape, they lost their captain and key defender Kompany.
Just as they looked to be getting over that rather large bump in the road, Real Madrid scored through a deflection.
City couldn't do a thing about Kompany's injury - although if it proves to the be 15th calf-related problem of his career, Pep Guardiola's reluctance to build the defence around him next season can be fully understood.
But the goal was the culmination of a succession of errors in the rearguard that is always going to lead to trouble at this level.
Nicolas Otamendi, for instance, was quick to appeal for offside but not so quick to get up to hold the line, meaning it was he who played Bale on.
Gael Clichy was at fault, too, slow to close down the danger, so Fernando was always going to be overstretched trying to block what most thought was intended as a cross.
It was turned into a shot, and an unstoppable one, by the rerouting off Fernando, which sent it past Hart and into the far top corner.
The saving grace for City was that it did not alter their mission.
After a 0-0 draw at home they always needed to score here, and that was no different after the goal.
Indeed, a single goal would have sent them through either way - a 1-1 draw and progress on away goals being as good as a 1-0 win in terms of its consequence.
All the goal did, really, was give Real Madrid confidence - and they seemed to have plenty of that already, the players high-fiving each other in the warm-up.
Their mood could only have improved after 10 minutes when a passage of play moved upfield, leaving a stricken Kompany in its wake.
He seemed to be in pain after kicking the ball and limped forlornly towards the sanctuary of the sidelines, not for the first time this season.
Eliaquim Mangala entered in his place, and Ronaldo immediately moved into the centre for his earliest involvement, sensing blood.
He didn't get much change in the first half, though, it must be said, the best of it being a 14th-minute header from Carvajal's cross.
Ronaldo's arm went up to demand the ball the moment he saw Carvajal in a good position. Well, Bale has been scoring a lot of headers of late.
Yet, for the most part, City handled Madrid well.
Bale caused Clichy plenty of bother, but the Welshman was restricted to a shot from range after 43 minutes, which Hart handled comfortably.
The best of it was probably an opportunity that fell to Marcelo after an exquisite pass by Modric.
He was allowed too much space, cut inside from the left and hit a shot that curled across the face of goal.
Not that City were without threat.
In the 22nd minute, De Bruyne picked out Fernando with a corner, his header steered over the bar.
Better was an opportunity just before half-time, set up by a lovely run, right to left, from Jesus Navas, ending with an equally fine pass to De Bruyne.
He put Fernandinho in and the Brazilian struck a low shot which hit the outside of a post.
It was a reminder that a single City goal would change the entire complexion of this game, although they might have been left requiring two after a sloppy pass served up by Yaya Toure at the start of the second half could easily have resulted in a second for Real Madrid, had it fallen to a calmer mind than Jese.