A few days ago, I warned you about issues between SP1 for SQL Server 2008 and CU4 here. Microsoft has been working very quick and we already have CU1 for SQL Server 2008 SP1; more information here.
This means that all the hotfixes included until SQL Server 2008 CU4, can be applied for SP1.
Detailed information on this matter can be found in Aaron Beltrand’s blog
Hi, here is the presentation and demos I used last Tuesday in TechDays 2009; the presentation was in Spanish; however, TSQL and VB are woldwide recognized languages :)
than you for attending :)
Note: the Live Meeting recording will be available soon; I'll post the LM url when is available.
For me was a pleasure to co-present those two sessions with my friend Javier Loria last week at DevWeek – London. you can download the presentations from those links:
- SQL Server 2008 Partitioning Techniques:
- SQL Server 2008: What to do, what not to do:
Thank you all for attending, and I hope to see you before Devweek 2010 :)
Microsoft has just released the Cumulative Update #1 for SQL Server 2005 Service Pack 3; this CU is specially compiled for customers that had SQL Server 2005 SP2 with CU10 or CU11; if you’re not in this case, you should avoid installing this CU;
More info at Microsoft SQL Server Release Services (http://blogs.msdn.com/sqlreleaseservices/archive/2008/12/20/cumulative-update-1-for-sql-server-2005-service-pack-3.aspx)
just a quick note:
http://blogs.msdn.com/nickmac/archive/2008/12/16/sql-server-2005-service-pack-3-released-to-web.aspx
SQL Server 2005 SP3 contains the hotfixes that were included in cumulative update packages for SQL Server 2005 Service Pack 2 from cumulative update package 1 to cumulative update package 9. For more information about the cumulative update packages for SQL Server 2005 Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base:
937137 (http://support.microsoft.com/kb/937137/ ) The SQL Server 2005 builds that were released after SQL Server 2005 Service Pack 2 was released
Note If you are upgrading from SQL Server 2005 SP2 Cumulative Update 10 or from SQL Server 2005 SP2Cumulative Update 11, you must apply a post-SP3 cumulative update after you upgrade to SP3 to obtain all the fixes. For more information about the post-SP3 cumulative update, click the following article number to view the article in the Microsoft Knowledge Base:
960828 (http://support.microsoft.com/kb/960828/ ) Cumulative update package 1 for SQL Server 2005 Service Pack 3
Microsoft Knowledge Base articles that describe these hotfixes will be released as they become available.
For more information about the bugs that are fixed in SQL Server 2005 Service Pack 3, click the following link - http://support.microsoft.com/?kbid=955706.
SQL Server 2005 Service pack 3 downloads are available below:
link to download SP3:
http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&displaylang=en
From http://msdn.microsoft.com/en-us/library/bb630354.aspx:
SQL Server Extended Events (Extended Events) is a general event-handling system for server systems. The Extended Events infrastructure supports the correlation of data from SQL Server, and under certain conditions, the correlation of data from the operating system and database applications. In the latter case, Extended Events output must be directed to Event Tracing for Windows (ETW) in order to correlate the event data with operating system or application event data.
SQL Server Extended Events Packages
http://msdn.microsoft.com/en-us/library/bb677278.aspx
A package is a container for SQL Server Extended Events objects. Objects from different packages can be mixed in an event session. For more information, see SQL Server Extended Events Sessions.
A package can contain any or all of the following objects, which are discussed in greater detail later in this topic:
- Events
- Targets
- Actions
- Types
- Predicates
- Maps
Packages are identified by a name, a GUID, and the binary module that contains the package.
1) we need to know the event name that fires for every page split:
SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
AND xo.[object_type] = 'event'
ORDER BY xp.[name];
for this sample, we will use sqlserver.page_split.
2) we need to know what columns “exposes” the event page_split:
select * from
sys.dm_xe_object_columns
where [object_name] = 'page_split'
file_id, and page_id is exposed on this event, but we still need more information such us database_id, or SQL query that causes the page split.
3) find out what additional columns we can add to the event:
SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
AND xo.[object_type] = 'action'
ORDER BY xp.[name], xo.[name];
You can see in the list that actions number 25, and 34 includes database_id, and sql_text. Please review the list because you may need include that application name, the username, or the plan_handle.
4) Destination (target) of the event:
SELECT xp.[name], xo.*
FROM sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE xp.[guid] = xo.[package_guid]
AND xo.[object_type] = 'target'
ORDER BY xp.[name], xo.[name];
for better performance we select an asynchronous target, such us file system (3).
5) Now we’re ready to create the Extended Event with the following code:
create event session xe_page_split on server
add event sqlserver.page_split
(action (sqlserver.database_id, sqlserver.sql_text)
where sqlserver.database_id > 4)
add target package0.asynchronous_file_target
(set filename=N'c:\temp\xe_page_split.xel',
metadatafile=N'c:\temp\xe_page_split.xem');
Explanation:
- The event name is sqlserver.event
- As action we add sqlserver.database_id, and sqlserver.sqltext; in this case the action is just adding new columns to the event (remember that the event exposed the file_id, and the page_id columns).
- Additionally we can add filters to the event: for this example, we’ll capture page splits only for user databases.
- The event destination will be a file: c:\temp\xe_page_split.xel.
6) start the Extended Event:
alter event session xe_page_split on server state = start;
7) let’s populate a table:
use Northwind
go
if not object_id ('dbo.t') is null
drop table dbo.t
go
create table dbo.t
(id int identity, v char(100) default 'a', constraint pk_t primary key (id))
go
insert dbo.t (v) select top 100000 'a'
from master.dbo.spt_values v cross join master.dbo.spt_values
8) wait a few seconds, because 1) the event is asynchronous, and 2) we haven’t specified the argument MAX_DISPATCH_LATENCY for the event (default value INFINITE).
9) find out if we have any row:
select COUNT(*)
from sys.fn_xe_file_target_read_file
('c:\temp\xe_page_split*.xel', 'c:\temp\xe_page_split*.xem', null, null)
10) Some XPath querying:
select
xml_data
, xml_data.value('(/event[@name=''page_split'']/@timestamp)[1]','datetime') time
, xml_data.value('(/event/data[@name=''file_id'']/value)[1]','int') file_id
, xml_data.value('(/event/data[@name=''page_id'']/value)[1]','int') page_id
, xml_data.value('(/event/action[@name=''database_id'']/value)[1]','int') database_id
, xml_data.value('(/event/action[@name=''sql_text'']/value)[1]','varchar(max)') sql_text
from
(select object_name as event, CONVERT(xml, event_data) as xml_data
from sys.fn_xe_file_target_read_file
('c:\temp\xe_page_split*.xel', 'c:\temp\xe_page_split*.xem', null, null)
) v order by time
that basically shows:
- when the event was fired.
- what file and page was involved.
- what database was affected.
- the query that forced the page split.
Note: Before running this event session in Production, please test it carefully and validate the performance penalties can cause.
Next Steps:
- As far as I know the object can not be identified but reading the TSQL sentence will be a good start.
- Page split is fired for every single page spitted: splits at the first and last page of the object is counted as well. You will have wisely to identify in what part of the object is happening: for example, you could use DBCC PAGE to find out that correlation.
Additional readings:
My friend José Miguel Torres has just published a brand new ebook on SQL Server Compact Edition; if you are a guy that is doing mobile devices development this book is a must; unfortunatelly the ebook is only available in Spanish.
This is the reference to the news:
http://geeks.ms/blogs/jmtorres/archive/2008/09/16/sql-server-compact-edition-buenas-pr-225-cticas.aspx
You can by the book from here:
http://www.solidq.com/ib/Press.aspx
By the way, if there are many English speaking developers interested on the book, the editor may consider translated to English... If this is your case, don't hesitate contacting the author.
Just a note before going further: I am going to maintain my blog in Spanish and English:
Frequently, as a trainer and consultant I have to face in our clients the benefits that customers can get implementing DRI in their systems. I usually get different arguments such us:
- If I don't define Foreign Keys, it is easier to perform bulk operations.
- I prefer to validate the integrity in the Data tier instead of the database.
- All the access to the base table is done using a set of stored procedures that I manage.
- We prefer not implementing DRI because our data model changes very frequently, and it is complex to change the database logical design.
I could count many more cases apart of those four; from my experiencie, I think that generally the root cause is related to their ALM processes, and their best practices. Almost always, you can come up with a safer and better design solution; in fact, during the classes and the mentoring sessions, you convice them to go for the change, but days after, they come back to their daily work, and they do not have time to GO for the change.
Here is a good post from Conor Cunningham (http://blogs.msdn.com/conor_cunningham_msft/archive/2008/08/07/foreign-keys-are-our-friends.aspx) showing a hidden benefits of using DRI that you may not know: Using DRI SQL Server Optimizer, may dedice not to access base tables because SQL Server already knows -- due to the DRI -- that if a row exist child table, it must exists one in the parent table.
However, I would like to make some suggestions in this matter, that you may see useful.
Using a very similar script to Conors':
| use AdventureWorks2008; go drop table f1 drop table t1 go create table t1(id int, v char(1) default 'a' , constraint t1_pk primary key (id)) go
create table f1(f_id int identity, t_id int not null, v char(1) default 'a' , constraint f1_pk primary key (f_id) , constraint fk1 FOREIGN KEY (t_id) REFERENCES t1(id)) go create nonclustered index nci_f1_t_id on f1 (t_id) declare @i int=0 set nocount on while @i < 2000 begin insert into t1 (id) values (@i) insert into f1 (t_id) values (@i) insert into f1 (t_id) values (@i) insert into f1 (t_id) values (@i) set @i+= 1 end |
Conor pointed in his post, those two queries does not need to access the base table -- as you can see in the execution plan:
| /* |--Index Scan(OBJECT:([AdventureWorks2008].[dbo].[f1].[nci_f1_t_id])) */ select f1.* from t1 inner join f1 on t1.id = f1.t_id /* |--Index Scan(OBJECT:([AdventureWorks2008].[dbo].[f1].[nci_f1_t_id])) */ select f1.* from f1 where exists (select * from t1 where t1.id = f1.t_id) |
And I'd like to suggest to the SQL Server Team considering those two cases as well:
| /* |--Nested Loops(Inner Join) |--Clustered Index Seek(OBJECT:([AW].[dbo].[t1].[t1_pk]), SEEK:([AW].[dbo].[t1].[id]=(1)) ORDERED FORWARD) |--Nested Loops(Inner Join, OUTER REFERENCES:([AW].[dbo].[f1].[f_id])) |--Index Seek(OBJECT:([AW].[dbo].[f1].[nci_f1_t_id]), SEEK:([AW].[dbo].[f1].[t_id]=(1)) ORDERED FORWARD) |--Clustered Index Seek(OBJECT:([AW].[dbo].[f1].[f1_pk]), SEEK:([AW].[dbo].[f1].[f_id]=[AW].[dbo].[f1].[f_id]) LOOKUP ORDERED FORWARD) */ select f1.* from t1 inner join f1 on t1.id = f1.t_id where f1.t_id = 1
/* |--Merge Join(Inner Join, MERGE:([AW].[dbo].[t1].[id])=([AW].[dbo].[f1].[t_id]), RESIDUAL:([AW].[dbo].[f1].[t_id]=[AW].[dbo].[t1].[id])) |--Clustered Index Scan(OBJECT:([AW].[dbo].[t1].[t1_pk]), ORDERED FORWARD) |--Index Scan(OBJECT:([AW].[dbo].[f1].[nci_f1_t_id]), ORDERED FORWARD) */ select t1.id, f1.* from t1 inner join f1 on t1.id = f1.t_id |
The first query, implements a typical OLTP query looking for all the detail rows for a given parent. In this example, SQL Server already knows that for each row in the child table (f1), at least exists one row in the header (t1). The only difference with the first query from Connor's post is the predicate, that I think fires the behaviour. In my humble opinion, the filter is highly selective, and then sets the t1 table in best position to be seek"ed".
The second query, seems to be a bit awkward, because SQL Server already knows that t1.id = f1.t_id. Why accessing t1 table, if the matching values are already in f1.t_id?
If you think that those last "logical suggestions" to avoid accesing parent tables should be considered by SQL Server, please, go to Conect and cast your vote (https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=363429).
Seguramente tiene una explicación técnica, aunque no lógica...

Más de una vez me lo han preguntado y he aquí una solución:
http://ssis.trigonblue.com/Excelin64bitenv/tabid/523/Default.aspx
Otra solución puede ser montar un SQL Express/Instancia SQL Server 32 bits y usar los drivers 32 bits.
Por cierto, también está disponible, el driver OLEDB para ODBC en 64 bits, para Windows 2003 -- no se si sirve también para Windows 2008:
http://blogs.msdn.com/data/archive/2008/04/07/64-bit-oledb-provider-for-odbc-msdasql-is-now-available-for-windows-server-2003.aspx
hola, otra publicación: creo que sabes que Itzik Ben-Gan (gran compañero y mejor amigo), está preparando la serie de libros de Inside SQL Server para 2008:
Como aperitivo, tenemos esta publicación en MSDN, que
An Introduction to New T-SQL Programmability Features in SQL Server 2008
http://msdn.microsoft.com/en-gb/library/cc721270(SQL.100).aspx
"Summary: This paper introduces key new Transact-SQL programmability features in Microsoft SQL Server 2008 as well as SQL/Common Language Runtime (CLR) enhancements. New Transact-SQL features provide improved performance, increased functionality, and enhanced globalization support. Transact-SQL programmability enhancements in SQL Server 2008 address the needs of both OLTP and data warehouse environments."
Hola, menuda alegría me he llevado: me han publicado un WP de Database Mirroring la gente de DELL en colaboración con la revista Window ITPro (los editores de SQL Magazine).
Esta es la introducción al WP:
"Databases hold the vital information that users need to do their jobs and that applications need to communicate with services and processes. So in many organizations, you need to ensure that your databases are up and running 24x7. These days, with database system design getting more and more complex, you must consider database availability from the early design stages. This is where Microsoft high availability technologies such as clustering, transaction log shipping, replication, and database mirroring come into play. This whitepaper introduces you to database mirroring, a new feature in SQL Server 2005 that transfers transaction log records directly from a principal server to a mirrored standby server and that lets you quickly fail over to the standby server. In this paper, you’ll learn:
- The roles of the participants and how database mirroring works
- How to set up, configure, and monitor database mirroring
- How database mirroring compares with other high availability technologies"
el White Paper completo en PDF lo puedes descargar desde:
http://www.windowsitpro.com, sección Recursos, elemento Whitepapers. luego allí busca la sección SQL Server y databases.
la url directa es: http://windowsitpro.com/Whitepapers/Index.cfm?fuseaction=ShowWP&wpid=4bebbba9-8451-441e-bbff-97d110338981
para poder descargar necesitas SOLAMENTE registrarte en la web, no es necesario que seas subscritor de SQLMag.
También quería agradecer a mis compañeros Enrique Catalá, Javier Loria, y Rubén Garrigós por sus comentarios técnicos, y por su puesto a Kathy Blomstrom por su gran ayuda en la revisión lingüistica.
Espero que os guste :)
Que por fin SQL Server tiene logo... mira este post:
http://blogs.msdn.com/wesleyb/archive/2008/06/03/sql-server-logo.aspx
Con la oleada de tipos de datos espaciales, el logo tiene un aire tridimensional, verdad?
Como sabéis, Windows 2008 Server Core no tiene .NET Framework, y por ende, no se pueden instalar productos que tengan como dependencia hacia .NET. Este es el caso de Powershell que se apoya en .NET para implementar todas esas nuevas maravillas.
Resulta, que Dmitry Sotnikov MVP de Windows (http://dmitrysotnikov.wordpress.com), ha conseguido instalar Powershell sobre un Windows 2008 Server Core. ¿Cómo lo ha hecho? con sentido común :) resulta que editando el instalable de .NET Framework con Orcas, ha quitado la restricción del OS, y ha tirado "palante"... este es el artículo paso a paso:
http://dmitrysotnikov.wordpress.com/2008/05/15/powershell-on-server-core/
No está soportado por Microsoft, que no quiere decir que no funcione (Blogs en MSDN de Powershell). Obviamente, experimentos en producción cero... y digo yo: ¿podrá hacerse algo similar con SQL Server? Yo entiendo toda la historia detrás de Server Core, pero como OS de servidor, debería ser posible que otros productos de servidor funcionen sobre el... SI, también entiendo que el número de escenarios y pruebas que hay que hacer es inmenso, pero bueno... por pedir que no quede :)
Nada, que me he instalado el World Wide Telescope, como comenta Miguel Llopis en su post:
http://geeks.ms/blogs/mllopis/archive/2008/05/13/microsoft-nos-regala-el-cielo-con-worldwide-telescope-descargadlo-ya.aspx, y la verdad es que me he quedado un poco con cara de niño (mira el video que aparece aquí: http://www.worldwidetelescope.org/experienceIt/ExperienceIt.aspx?exp=true; en fin, seguiremos siendo niños de vez en cuando delante del portatil :)
Por cierto, lo bonito que parece todo lo que se ve ahí fuera, y lo mal que estamos dejando este planeta... ¿será porque todavía no hemos llegado? Espero que cambiemos porque todavía estamos a tiempo...
Parece que los equipos de Windows y SQL han trabajado juntos para mejorar el rendimiento de las réplicas en SQL Server 2008; las diferencias de tiempos son notables :)
Texto extraido del siguiente post:
http://blogs.msdn.com/buckwoody/archive/2008/05/05/windows-2008-and-replication.aspx
"Windows Server 2008 includes a new networking stack, redesigned and rewritten from the ground up, with modern protocol implementations. Besides making IPv6 a full-fledged peer of IPv4, it supports better perf over high-latency, high-loss nets.
In [SQL Server 2008] Katmai, the DP & perf teams collaborated with Windows core networking, so SQL networking could take better advantage of the new stack. The impact of this work can be seen in just-completed replication testing, between two sites separated by over 2,000 miles.
The results are nothing short of eye-popping. A pull replication scenario, which used to run in 223 minutes using [SQL Server 2005] Yukon on Win2K3, takes just under 2 minutes on [Windows 2008 Server] Longhorn server with Katmai. And an 11.3GB snapshot was sent >2K miles in ~23 minutes, a rate of almost 500 MB/minute. That’s BYTES, not bits. Talk about “better together”!"
Esta es la agenda de la reunión de GUSENET del próximo 9 de mayo.
No hace falta recordar que es gratuito, y es deseable que os registreis en la web de Microsoft, para tener previsión de cuantos asistentes habrá:
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032378512&Culture=es-ES
Cómo llegar al lugar del evento: Clave Informática, Poligono Industrial Torrellano.
http://maps.google.com/maps?f=q&hl=en&geocode=&q=Galileo+Galilei,+12+Elche+Torrellano,+Espa%C3%B1a&sll=37.0625,-95.677068&sspn=80.811536,106.523438&ie=UTF8&ll=38.288522,-0.611308&spn=0.010189,0.013003&t=h&z=16&iwloc=cent
GUSENET: SQL Server 2008
Lugar: Clave Informática
Día: 9 de Mayo de 2008
Agenda:
| 16:00 - 16:30 | Bienvenida y registro | |
| 16:30 - 17:45 | Novedades en SQL Server 2008 para administradores | Enrique Catalá |
| 17:45 - 18:15 | Descanso | |
| 18:15 - 19:30 | Detección de problemas de rendimiento en SQL Server 2005 | Eladio Rincón |
Nos vemos allí :)
Introducción
En instalaciones que implementéis database mirroring, debéis realizar tareas de administración para cuestiones que se salen del ámbito de la base de datos; por ejemplo: ¿qué haces con los planes de mantenimiento como reindexaciones, copias de seguridad, etc.? Sabes que todo esto está fuera de la base de datos, concretamente en MSDB, por lo que si modificas el plan de mantenimiento de una BD en Mirroring, tendrás que encargarte de transferir ese plan al servidor mirror, y "prepararlo" para que comience a operar cuando suceda el failover.
¿Qué pasa con los inicios de sesión? Como bien sabes, la información del inicio de sesión, va almacenada en la base de datos master, y de esta base de datos, no se transfiere información al servidor mirror. También debes sabes, que la base de datos en mirroring, tiene almacenado "internamente" el usuario de base de datos, que a su vez está relacionado con el inicio de sesión a través de una clave ajena no declarada J esta clave ajena es la columna SID.
El problema
Bajo esta premisa anterior, ¿qué pasaría si a una base de datos que forma parte de una sesión de database mirroring, se le añade un usuario que tiene asociado un inicio de sesión SQL? Por el razonamiento anterior, el paso que habríamos dado sería:
- Crear inicio de sesión con su contraseña.
- Crear usuario de base de datos y asignar permisos sobre objetos (GRANTs, DENYs, etc.etc.)
¿Qué sucedería por debajo? La sesión de database mirroring, enviaría a la base de datos del partner, el usuario de base de datos recién creado. Sin embargo, la sesión de mirroring no envía el inicio de sesión. Ahí es el momento en el debes entrar tu como DBA. Te vas al servidor que está como mirror, y allí debes crear el inicio de sesión – que recuerda va almacenado en master. Pero claro, deberás crearlo de forma que el SID que hemos comentado antes, esté en concordancia con el que va a estar en master.
La solución
Para ello en SQL Server 2005, tienes la opción de especificar un SID específico durante la creación del inicio de sesión; un ejemplo sería el siguiente:
CREATE
LOGIN usuario WITH
PASSWORD
=
'usuario',
CHECK_POLICY
=
OFF,
SID
= 0xA8C8CD1094A7964897C0E38ADBB3233E
Fíjate que el pedazo GUID ese, deberá ser el mismo que tienes en master del servidor principal; ¿de qué forma puedes consultar esa información? Con la siguiente consulta:
select
name,
sid
from
sys.server_principals
where
name
=
'usuario'
También hay un artículo de KB que te puede servir qué básicamente que genera el script de creación de todos los inicios de sesión de una instancia de SQL Server 2005; los inicios de sesión que te interesen los ejecutas en el servidor de destino, y listo:
How to transfer the logins and the passwords between instances of SQL Server 2005 (http://support.microsoft.com/kb/918992).
Lo que debes evitar
Lo que no deberías hacer es usar el procedimiento almacenado sp_change_users_login, que hace precisamente lo contrario: recuerda que con el create login, lo que hacemos es crear un inicio de sesión con un SID específico; lo que hace el procedimiento que acabo de comentar, "arregla" el SID de la base de datos y lo pone en concordancia al SID a nivel de inicio de sesión, así que imagínate el siguiente escenario (que es el origen de esta entrada de blog):
Notas finales
Esto no sucede con inicios de sesión de Windows porque el SID va asociado a las credenciales de Windows. ¿Una razón más para usar autenticación integrada? Creo que si J
Antiguamente, para Log Shipping, en SQL Server 2000, había un procedimiento almacenado llamado sp_resolve_logins (http://msdn2.microsoft.com/en-us/library/aa238877(SQL.80).aspx), que hacía lo que su nombre indica: "arreglar" logins. Lo hacía de una forma peculiar, necesitabas un BCP de la tabla syslogins de la instancia de origen, y luego el procedimiento se recorría cada login, y lo arreglaba. Por cierto, si usabas el código original en SQL Server 2000, deberías actualizar el script (si lo usas) porque fallaba (http://support.microsoft.com/kb/310882). Si te fijas en el código, utiliza el procedimiento sp_change_users_login para arreglarlo… menos mal que Log Shipping no devuelve credenciales al servidor de origen, porque tendríamos lío otra vez J
Corolario
Utiliza CREATE LOGIN WITH SID, cuando quieras transferir inicios de sesión de SQL Server entre distintas instancia de SQL Server, y quieras mantener el mismo SID.
No utilices el procedimiento sp_change_users_login, que por cada failover tendrás que estar tirando de él.
Si alguna vez has dudado si eres capaz de hacer algo, te recomendaría que echaras un vistazo a este video de Adidas para ayudarte a tomar la decisión:http://www.youtube.com/v/cv9zTzlNu-k&hl=en; en definitiva, le tienes que dedicar pasión a lo que quieres hacer; efectivamente, habrá gente que tiene cualidades innatas para ciertas cosas, pero siendo sincero, y sin querer tirar de tópicos, la fe mueve montañas… pasión, tienes que apasionarte con lo que haces.
¿Tienes más claro si te sientes capacitado para hacerlo? Si no te sientes capacitado, ¿has identificado las causas por las que no puedes hacerlo? Estaría bien comenzar solucionando las restricciones que encuentras… en definitiva, si no te sientes preparado, identifica las causas, e intenta resolverlas para la próxima ocasión, que seguro habrá J
Sobre el video, Adidas hizo un montaje de un entrenamiento de Mohammed Ali cuando estaba preparándose para un combate con Foreman (creo que fue para este combate: http://www.youtube.com/watch?v=Kf64ZCYVcEI&feature=related). En el montaje puede verse corriendo a fenómenos como Zidane, Haile Gebrselassie, Ian Thorpe, y Beckam (que parece no poder seguir el ritmo J).
More Posts
Next page »