Ayrton Senna had vanaf de pole-position een perfecte start en hield Nigel Mansell, Riccardo Patrese, Jean Alesi, Gerhard Berger en Alain Prost achter zich. In de achtste ronde leidde hij al met drie seconden. Tegen ronde 20 reed Mansell echter alweer op 0,7 seconden. In de 17de ronde maakte Alain Prost een pitstop om te vermijden, dat hij achter de Benetton van Nelson Piquet kwam vast te zitten. Mansell kwam binnen in de 26ste ronde, maar maakte een erg trage stop van 14 seconden. Hierdoor kwam hij terug op het circuit achter Patrese en Alesi.
Nadat Senna en Patrese hun stops hadden gemaakt, reed Mansell zeven seconden achter de McLaren. Het leek erop dat Mansell Senna ging bijhalen, maar de Brit kreeg de kans niet, omdat hij in de 50ste ronde opnieuw binnen moest komen met een lekke band. Senna had intussen problemen met de versnellingsbak; hij had geen vierde versnelling meer, maar het was Mansell die in de 61ste ronde met versnellingsbakproblemen moest opgeven.
Senna verloor ook nog zijn vijfde en derde versnelling, waardoor hij zelfs in tragere bochten in de zesde versnelling moest blijven. Hierdoor viel hij een aantal keer bijna stil. Patrese kwam snel dichterbij, maar eveneens geplaagd door versnellingsbakproblemen moest hij vertragen. Toen het weer verslechterde, begon Senna gebaren te maken naar de stewards om de race stop te zetten, iets wat hij ook in Adelaide later in het seizoen zou doen.
Senna won uiteindelijk met 2,9 seconden voor Patrese en moest door uitputting uit de wagen gehaald worden. Ondanks een klein brandje op de grid en problemen met het gaspedaal, werd Berger derde.
Het was voor het eerst sinds de Grand Prix Formule 1 van Brazilië 1986 met Nelson Piquet als winnaar, dat er weer een Braziliaan een thuiszege behaalde. Voor Ayrton Senna was het zijn eerste.